[ruby] 다른 것없이 루비 삼항 연산자

“If do-this”와 “do-this”에 대한 루비 관용구가 간단한 명령처럼 있습니까?

예를 들어, 저는 현재

object.method ? a.action : nil

else 절을 ​​비워 두는 것이지만, 끝에 nil을 지정하지 않아도되는 좀 더 관용적 인 방법이있을 것 같습니다. (또는이 경우 여러 줄의 코드를 작성하는 것이 낭비라고 생각합니다.



답변

a.action if object.method?


답변

일반적으로 Ruby에서는 삼항 연산자가 거의 필요하지 않습니다. C에 있기 때문에 당신이 C에 필요한 이유이며, if여러분이 값을 반환 할 그렇다면, 성명이다 표현이다 삼항 연산자를 사용합니다.

루비에서는 모든 것이 표현식이고, 문장 없으므로 삼항 연산자를 거의 불필요하게 만듭니다. 언제든지 교체 할 수 있습니다.

cond ? then_branch : else_branch

if cond then then_branch else else_branch end

따라서 귀하의 예에서 :

object.method ? a.action : nil

다음과 같다

if object.method then a.action end

@Greg Campbell이 지적했듯이 이는 후행 if수정 자 형식 과 동일합니다.

a.action if object.method

또한, 루비의 부울 연산자 이후 단지 반환하지 truefalse,하지만 마지막에 평가 식의 값, 당신은 제어 흐름을 위해 사용할 수 있습니다. 이것은 Perl에서 가져온 관용구이며 다음과 같습니다.

object.method and a.action


답변

Greg의 대답이 가장 좋지만 기록을 위해 C보다 훨씬 더 많은 표현식과 문은 Ruby에서 동일하므로 a.action if o.m?다음과 같은 작업도 수행 할 수 있습니다.

object.method? && a.action

당신은 쓰거나 (a; b; c) if d심지어

(a
 b
 c
) if d

또는 그 문제에 대해 : (x; y; z) ? (a; b c) : (d; e; f)

루비에는 하나의 문이나 표현 만 허용되는 상황이 없습니다.


답변

result = (<expression> && <true value>) || <false value>

value = 1
result = (value == 1 && 'one' ) || 'two'
result #=> 'one'

설명 : value == 1 && ‘one’# => 마지막 표현식 결과를 반환하고 값은 1이므로 섹션이 평가되고 ‘one’을 반환합니다.

value = 0
result = (value == 1 && 'one' ) || 'two'
result #=> 'two'

설명 : value! = 1 및 ‘and’표현식은 평가되지 않지만 instad는 ‘or’표현식을 사용하고 ‘two’를 반환합니다.


답변

동일한 라인에서이를 수행 할 수있는 또 다른 방법은 다음과 같습니다.

if object.method; a.action end

이것은 세미콜론을 사용하여 표현식을 종료하기 때문에 Rubocop에 의해 나쁜 스타일로 간주되지만, 끝에 if 문을 붙이는 것보다 일부 조건에서 더 읽기 쉽습니다. 마지막에 if 문을 간과하는 것이 더 쉬우 며 조건이 참이 아닌 경우 항상 무언가를 반환하고 싶지는 않습니다 (삼항 연산자로 강제 실행 됨).

좀 더 장황하고 rubocop 친화적 일 수도 있습니다.

if object.method then a.action end


답변