2013-07-27 2 views
9

truefalse 사이에서 변수 토글을 설정하는 가장 좋은 방법은 무엇입니까?부울 변수를 전환하는 가장 좋은 방법은 무엇입니까?

foo = false 

및 수행 :

foo = foo.! 

내가 전환 할 때마다 확실한 방법은 변수 foo를 초기화하는 것입니다. 그러나 이것은 변수 이름이 길면 길어집니다. 이 작업을 수행하는 더 간단한 방법이 있습니까 (예 : 설탕, 원본 클래스 등). 특히 하나의 방법으로 토글하는 방법이 있는지 궁금합니다.

foo.some_method 
+6

'foo는.!'이럴 아주 못생긴입니다. 왜'foo =! foo'가 아닌가? – Hauleth

+0

@ ŁukaszNiemier foo =! foo 더 많은 루비 스타일의 방법으로 동의하십시오. – CodeGroover

+0

나는 '!'메소드조차 몰랐습니다. @ ŁukaszNiemier의 제안은 더 전형적입니다. 이중 양식에서 값이 부울이 아니며 부울로 변환 될 수있는 변수를 사용하기도합니다. 'foo = 1; foo = !! foo;'. –

답변

22

XOR 연산자를 사용할 수 있습니다. 사용

foo ^= true 

foo = false 
foo ^= true # => true 
foo ^= true # => false 
+0

이것은 시원합니다. 그것은 작동합니다. – sawa

+11

작동하지만 일반적인 지식이 아니므로 코드에서 볼 때 많은 사람들이이를 이해하지 못합니다. 다른 프로그래머가 코드를보고 유지 관리 할 가능성이 있다면 '!'에 표준 부정을 사용해야합니다. –

+4

@Nate 나는 당신이 진실 (또는 그것이 조금이라도 '1'이라면)을 xor 할 때 논리 값 (true/false, 또는 1/0)이 토글되는 것은 일반적인 지식이라고 생각했다. 최소한 비트 트위터의 세계에서는 잘 알려져 있습니다. 기본적인 부울 논리입니다. 소프트웨어 엔지니어가 그 사실을 빨리 파악할 수 없다면 걱정할 것입니다. – lurker

관련 문제