Maison  >  Questions et réponses  >  le corps du texte

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 Il y a quelques jours599

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-04-24 09:13:42

    Problème de version.

    Ce livre devrait être assez ancien et la version Ruby que vous utilisez est antérieure à la 2.0. À partir de Ruby 2.0, le comportement de Proc#== a changé :

    Depuis Ruby 2.0, Two procs are == only when they are the same object. ne renvoie == que si les deux procs sont le même objet. true

    Référence :

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

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

    3. répondre
      0
  • 天蓬老师

    天蓬老师2017-04-24 09:13:42

    En regardant la documentation officielle de Ruby, lambda est en fait Proc
    Proc ne surcharge pas sa propre méthode ==, mais appelle la méthode == de BasicObject

    Égalité — Au niveau de l'objet, == renvoie vrai uniquement si obj et other sont le même objet (la méthode de comparaison des objets au niveau de l'objet consiste à déterminer s'il s'agit du même objet).
    En règle générale, cette méthode est remplacée dans les classes descendantes pour fournir une signification spécifique à la classe.

    Proc

    Regardez la classe de base de Proc et vous pouvez voir qu'elle hérite d'Object, puis Object hérite de BasicObject

    répondre
    0
  • Annulerrépondre