2010-05-05 2 views
8

이것은 이론적 인 질문입니다. FalseClass 동작을 TrueClass처럼 작동하도록 변경할 수 있습니까? to_s, xor, &을 무시할 수 있습니다. | 행동하지만 충분하지 않습니다.FalseClass가 메타 프로그래밍을 사용하는 TrueClass처럼 동작하도록하십시오.

테스트가 개발을 주도 좋아, 내 동료의 제안에 따라 :

puts "false is new true!" if false 
puts "never happens" if true 

assert false 

는 것, 작동하지 않습니다 어설 션을? 테스트를 성공적으로 통과 할 수 있습니까?

+0

C 코드 난독 화가를 생각 나게합니다. http://www.ioccc.org/ – Lucero

+0

저는 수년간 응용 프로그램을 개발해 왔지만 이제는 제대로 작동하지 않는 것으로 밝혀졌습니다. 그래서 나는 그것을 올바르게 반전시키고 싶습니다. 기본 논리 –

+0

시험에 대한 주장이 없습니다. ( – shingara

답변

9

불가능합니다. 그것에 대해 생각할 수있는 한 가지 방법은 다시 정의 할 수있는 방법이 없다는 것입니다 (Object#truthiness?).

루비 MRI에서

는 truthiness 테스트 QfalseQnil, 두 상수 falsenil에 해당하지만 아무 의미하는 고정 배선 된 RTEST 매크로입니다. "진실"이 무엇인지 다시 정의하기 위해이를 변경해야합니다.

2

적어도 공식 Ruby 구현에서는 true 및 false 논리가 C 부분 (Qtrue 및 Qfalse)에서 깊지 않으므로 불가능합니다. 하지만 어설트를 덮어 쓰면 어설트 패스가 작동합니다. 또한 ruby2ruby와 같은 것을 사용하여 모든 값을 파싱 할 수 있지만 true보다 여전히 false로 동작하지 않으며 ![]과 같은 명령문은 여전히 ​​true를 반환합니다. 또한 모든 다른 객체는 if 문과 유사 할 때 true와 유사하게 동작합니다.

+0

공식 Ruby 구현, MRI/YARV에 대해 이야기하고 있습니다. 맞습니까? –

+0

예, Maglev에서는 Smalltalk의 'become'를 사용할 수 있습니다. –

관련 문제