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

HI,以下是小弟的尝试:

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

为什么是false呢?

伊谢尔伦
伊谢尔伦

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

répondre à tous(2)
Ty80

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

Peter_Zhu

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal