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

HI,以下是小弟的尝试:

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

为什么是false呢?

伊谢尔伦
伊谢尔伦

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

모든 응답(2)
Ty80

버전 문제.

이 책은 꽤 오래된 책이어야 하며, 사용 중인 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

Peter_Zhu

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

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

프로세스

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿