Rumah > Soal Jawab > teks badan
HI,以下是小弟的尝试:
p=lambda {|x| x*x}
q=p.dup
puts q==p #out false
puts p.object_id
puts q.object_id
为什么是false呢?
PHP中文网2017-04-24 09:13:42
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
天蓬老师2017-04-24 09:13:42
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