2016-06-21 3 views
0

나는 그것이 유효한 루비가 아니라는 것을 알았지 만, Ruby 핵심 언어 (v2.3)에 아래의 기능을 구현하는 기술적 장애물은 무엇이 있을까요?인라인 if else else

variable = 1 if condition else -1 

더 일반적인 용도로 다음을 허용하고 싶습니다.

variable = { 1 } if condition else { -1 } 

나는 끝에 "끝"이 필요합니다.

3 진수가 쉽게이 작업을 수행 할 수 있지만 더 읽기 쉬운 인라인을 찾고 있습니다.
나는 여러 가지 스타일을 통해이 작업을 수행 할 수 있지만 가능하면 읽을 수있는 기능을 선호합니다.

감사합니다.

편집 : 명백한 이유로 질문 편집이 싫습니다. 제네릭 옵션이 루비가 더 많은 방식에 대한 질문에 대한 답변으로 아래 예제 (새 라인이 필요함)를 참조하십시오.

variable = { 
    operation_one 
    operation_two 
    ... 
    SUCCESS_STATUS_CODE 
} if loaded_dependencies else { 
    do_detailed_logging 
    FAILURE_STATUS_CODE 
} 

if variable then 
    it_worked 
else 
    explain_why 
end 
+0

예를 들어'condition'이'true' 일 때'variable'을'1'로 설정하고,'condition'이'false' 일 때'variable'는'-1'을 설정합니까? –

+0

예, 유효하지 않은 루비입니다. – bk5115545

+0

알아, 나는 너의 의도를 확실히 이해하고 싶었다. 왜 그냥'variable = condition? 1 : -1' 또는'변수 = 조건 일 경우 1 else -1 end'? –

답변

2

귀하의 예는 귀하에게 읽기 쉬운 것으로 보이지만 다른 경우에는 너무 많은 모호성이 있기 때문입니다.

루비가 이런 식으로하는 법을 결정한 것은 말할 것도없고, 삼항 연산자입니다. 당신의 예제가 루비와 유사하다고 말하는 것은 포드 머스탱의 휠베이스가 더 이상 왜 아니 었는지 궁금해하는 것과 비슷하다. 그리고 그것이 있다면 머스탱과 같을 것이다.

그러나 여기 당신의 예에서 시작, 당신의 제안에 몇 가지 문제가 있습니다 :

variable = { 1 } if condition else { -1 } 
다음

당신이 준 당신의 "다른이 경우"를 "="보다 낮은 우선 순위를 비트. 즉

:

는 현재 허용 나누기 때문에 심각한 문제가 있어요
variable = ({ 1 } if condition else { -1 }) 

:

variable = 1 if condition 

그 진술의 우선 순위는 다음과 같습니다

(variable = 1) if condition 

그리고 그 중대한. 조건이 거짓이면 할당이 수행되지 않습니다.

예를 들어 좌변 값에 실제로 부작용이있는 경우에는 매우 큰 문제가 될 수 있습니다. 예를 들어 :

var[0] = 1 if condition 

에 대한 조회 "VAR [0]"무엇이든 클래스 개체 VAR의 방법이며, [] 일반적으로 부작용이없는 동안, 그것은 수 - 당신은 지금 조건이 거짓 일지라도 부작용을 일으킬 것입니다.

그리고 난으로받지 않습니다 :

variable = { 1 } if condition if condition2 else { -1 } 

그러나 당신이 그것을 좋아하지 않는 경우에, 당신은 항상 자신의 언어를 쓰기 무슨 일이 일어나는지 볼 수 있습니다!

+0

통찰력을 가져 주셔서 감사합니다. 나는 조건에 관계없이 과제가 나올 것이라는 점을 분명히하고 있기 때문에 부작용 문제는 보이지 않습니다. 예를 들어 과제가 항상 발생하므로 부작용이 항상 발생합니다. 이것을 구현할 때 유일하게 이상한 점은 하위 호환성을 유지하기 위해 할당 연산 전에 조건을 완전히 실행해야한다는 것입니다. 마지막 예제는 소스에서 발견 된 규칙을 렉싱하여 (variable로 = ({1} condition (nil if condition2 else {-1}))'로 확장합니다 (유효한 것으로 구문 분석 된 경우). – bk5115545

+0

'else'는 항상 토큰 스트림에서 가장 가까운'if '를 수정하기 때문에'end'가 없습니다. – bk5115545

+0

부작용을 갖는 일어난다는 것을 의미한다 : 완전히 다른가요 '42 경우에는 [0] =' '는 [0] (42) 다른 43 경우 ='- 제는 부작용을 가질 수없는 루비의 본질을 완전히 바꾸지 않고. –

관련 문제