84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
HI,以下是小弟的尝试:
p=lambda {|x| x*x} q=p.dup puts q==p #out false puts p.object_id puts q.object_id
为什么是false呢?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
版本问题。
你的这本书应该比较老了,用的 Ruby 版本是 2.0 之前的。从 Ruby 2.0 开始,Proc#== 的行为发生了变化:
Ruby
从 Ruby 2.0 开始,Two procs are == only when they are the same object.只有当两个 proc 是同一对象时,== 才返回 true。
Two procs are == only when they are the same object.
==
true
参考:
https://bugs.ruby-lang.org/issues/4559
https://github.com/ruby/ruby/blob/f031aec4233d7a6d4622c048abed3e86eb5dd6c2/NEWS#L127-130
看了一下ruby的官方文档,lambda 实际就是 Proc, Proc并没有重载自己的 ==方法,调用的是BasicObject的 == 方法
Equality — At the Object level, == returns true only if obj and other are the same object(Objec层次比较对象的方法是判断是否是相同的对象).Typically, this method is overridden in descendant classes to provide class-specific meaning.
Proc
查看Proc的基类就可以看到继承自Object,然后Object继承自BasicObject
版本问题。
你的这本书应该比较老了,用的
Ruby
版本是 2.0 之前的。从 Ruby 2.0 开始,Proc#== 的行为发生了变化:从 Ruby 2.0 开始,
Two procs are == only when they are the same object.
只有当两个 proc 是同一对象时,==
才返回true
。参考:
https://bugs.ruby-lang.org/issues/4559
https://github.com/ruby/ruby/blob/f031aec4233d7a6d4622c048abed3e86eb5dd6c2/NEWS#L127-130
看了一下ruby的官方文档,lambda 实际就是 Proc,
Proc并没有重载自己的 ==方法,调用的是BasicObject
的 == 方法
Proc
查看Proc的基类就可以看到继承自Object,然后Object继承自BasicObject