免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 兰花仙子
打印 上一主题 下一主题

mlists一位大侠对上下文概念的阐述 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-03-13 10:33 |只看该作者
受教了,谢谢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2007-03-13 10:44 |只看该作者
看不懂,仙子给翻译下。

论坛徽章:
0
13 [报告]
发表于 2007-03-13 23:55 |只看该作者
谢谢仙女,都不明白当初怎么想的了,现在怎么看这个结果都没问题的

我的理解是:

print("\n" . reverse(@string_array) . "\n";

显示"woherauoy" 的理由上下文决定这是个scalar了,所以list中的所有字符均被串成一个scalar, 然后reverse。

这样对比显示一下可能明白一点
print("\n" . reverse(@string_array) . "\n";
print("\n" , (@string_array) , "\n";

论坛徽章:
0
14 [报告]
发表于 2008-01-24 18:08 |只看该作者
print("\n" . reverse(@string_array) . "\n";

既然reverse处于scalar context下,那@string_array应该返回数组长度才更合理啊?有没有高手进一步解释一下。

论坛徽章:
0
15 [报告]
发表于 2008-01-24 19:47 |只看该作者
翻了翻《Perl语言入门》,找到了答案。

  1. 有许多表达式通常都是产生列表的。当其在标量context 中使用时,会得到什么结果呢?让我们看看这个操作的创始人怎么
  2. 解释的。通常,这个人是Larry,其文档展现了整个历史。对于Perl 的学习,大部分是学习Larry 是怎么的想的◆。因此,
  3. 一旦你能像Larry 那样思考时,你就能明白Perl 的行为。当学习时,你可能需要查看其文档。
  4.     ◆更准确的说,Larry 创建Perl 时,是按照你希望它怎样操作来设计的。

  5. 一些表达式根本没有标量context 的值。例如,sort 在标量context 中返回什么?你不需要要排序一个列表来得到其个数,因
  6. 此,除非有人按另一种方式实现了sort,否则其在标量context 中返回undef。
  7. 另一个例子是reverse。在列表context 中,它返回反转的列表。在标量context 中,返回反转的字符串(或者将反转的结果串
  8. 成一个字符串):
复制代码


我觉得可以这么理解表达式在特定上下文中的求值规则:一般情况下,依靠所谓的expected值来决定上下文;如果需要运用perl,也就是Larry本人的设计哲学时,则从该哲学出发。

论坛徽章:
0
16 [报告]
发表于 2008-01-24 23:30 |只看该作者
有许多表达式通常都是产生列表的。当其在标量context 中使用时,会得到什么结果呢?让我们看看这个操作的创始人怎么
解释的。通常,这个人是Larry,其文档展现了整个 ...


习惯就好了.什么语言都有易混淆之处的.
经常有人批评perl的上下文,其实python不也同样有这个概念...

def test(a,b,c):
    return a,b,c

到底是return一个tuple还是三个object呢?

x=test(1,2,3)
x,y,z=test(1,2,3)

2个x值不同,当然可以说后者是unpack一个tuple,但如果说perl的上下文让人混淆,python这里也好不了多少.

论坛徽章:
0
17 [报告]
发表于 2008-01-25 10:09 |只看该作者
原帖由 兰花仙子 于 2008-1-24 23:30 发表


习惯就好了.什么语言都有易混淆之处的.
经常有人批评perl的上下文,其实python不也同样有这个概念...

def test(a,b,c):
    return a,b,c

到底是return一个tuple还是三个object呢?

x=test(1,2,3) ...



不过我认为Larry在这一点上还是使用了某种违反直觉的“哲学”,呵呵。

总体,来说,Larry的哲学还是很务实,很让程序员喜欢的。

也许,是我的悟性不够,估计等我真正认同关于sort,reverse的默认行为背后的哲学思想时,我就跨入高手行列了。

论坛徽章:
0
18 [报告]
发表于 2008-01-25 11:31 |只看该作者
不知道能不能回帖。

论坛徽章:
0
19 [报告]
发表于 2008-01-25 11:40 |只看该作者
原帖由 兰花仙子 于 2008-1-24 23:30 发表


习惯就好了.什么语言都有易混淆之处的.
经常有人批评perl的上下文,其实python不也同样有这个概念...

def test(a,b,c):
    return a,b,c

到底是return一个tuple还是三个object呢?

x=test(1,2,3) ...



Perler在这种鸡蛋里挑骨头的领域一向是很有创意的。不过胡说八道永远是胡说八道。


  1. def test(a,b,c):
  2.     return a,b,c
复制代码

告诉你,这里返回一个tuple。tuple本身就是一个object,这个总应该知道吧。


  1. x= test(1,2,3)
复制代码

x是一个tuple。没意见吧。explicit吧。


  1. a, b, c= test(1, 2, 3)
  2. x = test(1, 2, 3)
  3. a, b, c = x
复制代码

有什么混淆的?有什么不明白的?还有什么骨头能挑?

Perl有问题,不但不承认,还一知半解地去曲解Python。这就是Perler的态度?

论坛徽章:
0
20 [报告]
发表于 2008-01-25 11:43 |只看该作者
更准确的说,Larry 创建Perl 时,是按照你希望它怎样操作来设


好像这就是我说的,强迫你接受Larry的想法。但问题是,他的想法对吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP