>  Q&A  >  본문

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일 전590

모든 응답(2)나는 대답할 것이다

  • PHP中文网

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

    버전 문제.

    이 책은 꽤 오래된 책이어야 하며, 사용 중인 Ruby 버전은 2.0 이전입니다. Ruby 2.0부터 Proc#==의 동작이 변경되었습니다:

    Ruby 2.0부터 Two procs are == only when they are the same object.는 두 프로세스가 동일한 객체인 경우에만 ==을 반환합니다. true

    참고:

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

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

    3. 회신하다
      0
  • 天蓬老师

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

    Ruby의 공식 문서를 보면 람다는 실제로 Proc입니다.
    Proc은 자체 == 메서드를 오버로드하지 않지만 BasicObject의 == 메서드를 호출합니다

    동일성 — 객체 수준에서 ==는 obj와 other가 동일한 객체인 경우에만 true를 반환합니다(객체 수준에서 객체를 비교하는 방법은 동일한 객체인지 확인하는 것입니다).
    일반적으로 이 메서드는 클래스별 의미를 제공하기 위해 하위 클래스에서 재정의됩니다.

    프로세스

    Proc의 기본 클래스를 보면 Object에서 상속받고 Object가 BasicObject에서 상속되는 것을 볼 수 있습니다

    회신하다
    0
  • 취소회신하다