2009-09-01 1 views

답변

9

저에게 이상하게 보입니다. 당신은 if (parent_id = if params...) 앞의 과제를 옮기거나 3 진을 사용할 수는 있지만 결과가 좋지 않을 것이라고 생각합니다. PARENT_ID 그 라인 이전에 존재하지 않거나 정의되지 않은 경우

간단히 작성할 수 있습니다

parent_id = params[:parent_id] unless params[:parent_type] == "Order" 
+0

awesome ... 이것은 일을하는 루비 방법이고, 과제는 앞에 간다. 이것이 우리가 반대로 같은 규칙을 가질 수 있도록 "제외"이유가 있습니다. –

7

그대로 그것은 정말 잘못된 아무것도하지만, 더 간결 만들 수 있습니다 : 또는

parent_id = (params[:parent_type] == "Order") ? nil : params[:parent_id] 

:

parent_id = if (params[:parent_type] == "Order") 
    nil 
else 
    params[:parent_id] 
end 
+2

거기에 오타가 있습니다. ">"는 "?"이어야합니다. –

+0

나는 두 번째 옵션을 정말 좋아합니다. 두 옵션 모두 궁극적으로 parent_id에 값을 할당한다는 것을 명확히합니다. – nimrodm

+0

x가 이미 할당 된 경우 x를 남겨 두는 "x = y가 아닌"형식과 달리 (x는 이미 할당 된 경우) 3 진 형식은 항상 값을 할당합니다 (if-else도 마찬가지 임). 따라서 if-else 형식을 복제하는 한 줄짜리 라이너를 원한다면 삼자를 사용하십시오. – zetetic

5

나는 그것이이다 방법 잘 생각하지 않습니다. 저는 루비 (Ruby) 사람이고, 그런 식으로 쓰는 것에 대해 당신을 비웃지 않을 것입니다. 코드가하는 일이 분명하고 코드 중복이 없으므로 걱정할 필요가 없습니다.

+0

나는 여기에도 동의한다 ... –

2

을 내가 좋아하는 :

parent_id = (params[:parent_type] == "Order" ? nil : params[:parent_id])
1

또 하나의 변화 :

parent_id = (params[:parent_type] == "Order") && params[:parent_id] 
+0

매우 표현적인 방식이 아닙니다 .. 사실 논리 연산자가 부울을 반환하지 않는다는 사실을 매우 혼란스럽게합니다 ... – luca

0

우리는 루비를 사용할 수 있습니다 삼항 연산자. 이 같은 뭔가 : 당신이 그것을 한 다른 방법으로 간단한 루비 경우 - 다른 사람을

parent_id = params[:parent_id] unless params[:parent_type] == "Order" 

또는 쓰기 : parent_idnil 값으로 설정되어

parent_id = params[:parent_type] == "Order" ? nil : params[:parent_id] 

경우, 우리가하지 않는 구문을 쓸 수

parent_id = if (params[:parent_type] == "Order") 
    nil 
else 
    params[:parent_id] 
end 

자세한 내용은 Idiomatic Ruby 코드를 보려면 awesome article을 찾았습니다.