Diagnostic and cause
링크Value is not comparable or keyable
- 계열
- topaz
- 단계
- check
- 코드
TPZ5007
원인과 조건
Equality requires comparable operand types. Function values are not comparable, so comparing two functions with == is rejected with TPZ5007. Comparing their int results is accepted.
관련 규칙 · Function values cannot be compared for equality →대응
Choose values with the required equality or ordering behavior. For a user-defined type, supply the supported protocol implementation or compare a suitable field.
Compiler phase: check/runtime.
Compiler explanation: The operation requires equality/order/key semantics that this type does not provide.
Message templates. The marker ⟨value⟩ stands for text computed for the reported program.
⟨value⟩is not ordered comparable, so.cannot sort it Source⟨value⟩() - the
⟨value⟩key type⟨value⟩is not ordered comparable, so.cannot sort it Source⟨value⟩() ⟨value⟩is not comparable, sotest.cannot compare it Source⟨value⟩ ⟨value⟩and⟨value⟩are not ordered comparable Source⟨value⟩and⟨value⟩are not comparable values Source⟨value⟩and⟨value⟩are never equal Source- ⟨value⟩ is not a valid Map/Set key (⟨value⟩ keys are not supported yet) Source
Observed for the candidate in Topaz 5.21.3. Execution
- error[TPZ5007]:
() -and> int () -are not comparable values> int
Equality requires comparable operand types. Function values are not comparable, so comparing two functions with == is rejected with TPZ5007. Comparing their int results is accepted.
Function values cannot be compared for equality
Equality requires comparable operand types. Function values are not comparable, so comparing two functions with == is rejected with TPZ5007. Comparing their int results is accepted.
Response
링크Choose values with the required equality or ordering behavior. For a user-defined type, supply the supported protocol implementation or compare a suitable field.
Reproduction and verification
링크Rejected program
링크function first() -> int { 1 }function second() -> int { 2 }let same = first == second
표준 출력 없음.기대 결과
Repaired program
링크function first() -> int { 1 }function second() -> int { 2 }let same = first() == second()
기대 결과
기대 결과
검사가 프로그램을 받아들입니다. 종료 코드 0.