Ruby lamdba 相等性?
伊谢尔伦
伊谢尔伦 2017-04-24 09:11:42
0
2
661

HI,以下是小弟的尝试:

p=lambda {|x| x*x}
q=p.dup
puts q==p #out false
puts p.object_id
puts q.object_id

为什么是false呢?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

membalas semua(2)
Ty80

Isu versi.

Buku anda ini sepatutnya agak lama, dan versi Ruby yang anda gunakan adalah sebelum 2.0. Bermula dengan Ruby 2.0, tingkah laku Proc#== telah berubah:

Setakat Ruby 2.0, Two procs are == only when they are the same object. hanya mengembalikan == jika kedua-dua proc adalah objek yang sama. true

Rujukan:

  1. https://bugs.ruby-lang.org/issues/4559

  2. https://github.com/ruby/ruby/blob/f031aec4233d7a6d4622c048abed3e86eb5dd6c2/NEWS#L127-130

Peter_Zhu

Melihat dokumentasi rasmi ruby, lambda sebenarnya Proc
Proc tidak membebankan kaedah == sendiri, tetapi memanggil kaedah == BasicObject

Kesamaan — Pada peringkat Objek, == mengembalikan benar hanya jika obj dan lain-lain adalah objek yang sama (Kaedah membandingkan objek pada peringkat Objek adalah untuk menentukan sama ada objek tersebut adalah objek yang sama).
Biasanya, kaedah ini ditindih dalam kelas keturunan untuk memberikan makna khusus kelas.

Proc

Lihat kelas asas Proc dan anda boleh melihat bahawa ia mewarisi daripada Object, dan kemudian Object mewarisi daripada BasicObject

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan