mlists一位大侠对上下文概念的阐述

看不懂,仙子给翻译下。
谢谢仙女,都不明白当初怎么想的了,现在怎么看这个结果都没问题的

我的理解是:

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

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

这样对比显示一下可能明白一点

QUOTE:
print("\n" . reverse(@string_array) . "\n";
print("\n" , (@string_array) , "\n";

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

既然reverse处于scalar context下,那@string_array应该返回数组长度才更合理啊?有没有高手进一步解释一下。
翻了翻《Perl语言入门》,找到了答案。

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

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

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


QUOTE:
有许多表达式通常都是产生列表的。当其在标量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这里也好不了多少.


QUOTE:
原帖由 兰花仙子 于 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的默认行为背后的哲学思想时,我就跨入高手行列了。
其实语言就是这样..接不接受看自己...

shhgs不接受的话..也没差..

但是你在这里一直讲..人家就会觉得你很烦...就算你有道理..久了也就会被认为没道理了...

我认为你讲的很有道理...
,reserve(), 与 . reserve() .   这种写法..本来就很容易让人混淆...我从来不会这麽写程序..

只是我只当perl是我解决问题的工具...不是要拿来膜拜的对象...

语言有问题是很正常的...全世界哪种语言没问题?如果没问题..为什麽还要出新版本..

大家请继续...


QUOTE:
原帖由 shhgs 于 2008-1-25 11:43 发表


好像这就是我说的,强迫你接受Larry的想法。但问题是,他的想法对吗?



这个问题说是上下文的问题,不如说是reverse的问题。reverse确实是设计得不好的一个函数。

反转一个字符串和反转一个LIST本身就是两种不同的操作,非要用一个函数来示。

这也罢了,而且更怪的是做哪种操作不是由参数来决定的,而是由所要求的返回值来决定的。



QUOTE:
原帖由 shhgs 于 2008-1-25 11:43 发表


好像这就是我说的,强迫你接受Larry的想法。但问题是,他的想法对吗?

此人人品有问题,鉴定完毕!

非常同意apile的看法。