Rumah  >  Soal Jawab  >  teks badan

Ruby lamdba 相等性?

HI,以下是小弟的尝试:

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

为什么是false呢?

伊谢尔伦伊谢尔伦2710 hari yang lalu595

membalas semua(2)saya akan balas

  • PHP中文网

    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

    Rujukan:

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

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

    3. balas
      0
  • 天蓬老师

    天蓬老师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

    balas
    0
  • Batalbalas