2017-11-12 3 views
1

나는 nil 또는 비 nil 값 중 하나를 반환하는 기능을 가지고 있고, 나는 다음과 같은 if에서 사용 - else 절 : 'elsif'브랜치에서 함수를 여러 번 호출하는 것을 피할 수있는 방법이 있습니까?

if condition_that_doesnt_involve_my_func 
    # do stuff 
elsif my_func(cur_line) 
    headers_found = my_func(cur_line) 
end 

내가 그것을 두 번 함수를 호출하기 때문에 위의 블록이 약간 낭비 느낌 분기 결과가 nil이면 평가 결과를 한 번 저장 한 다음 다음 절에서 사용하면됩니다.

함수를 한 번만 호출 할 수 있도록이 코드를 다시 작성하는 방법이 있습니까?

elsif headers_found = my_func(cur_line) 

나는 그것을 권하고 싶지 않다 및 Rubocop는 그 중 하나를 좋아하지 않는다 :

+0

값이 trueish이거나 headers_found에도 false 값을 할당해도 괜찮습니까? – spickermann

답변

2

당신은 쓸 수 있습니다.

+0

혼란 스럽습니다 ... 방금 답변으로 입력 한 솔루션을 추천하지 않으시겠습니까? 추천할만한 해결책이 있습니까? – Dave

+1

매우 짧은 예제 만 제공했다면 이것이 더 짧아 질 수있는 유일한 방법입니다. 그러나 나는 그것이 가독성 관점에서 개선되지 않았다고 생각합니다. 'if' 이후에'=='는 조건을 기대할 수는 있지만'='로 할당하지 않기 때문에 혼란을 겪을 수 있습니다 (Rubocop이 불평하는 범죄입니다). 아마도 더 긴 예제를 제공한다면 더 좋은 방법이 될 것입니다 ... – spickermann

+0

사람들은 항상 내 질문에 가장 간단한 양의 코드를 넣어야한다고 불평하므로 간결하게하십시오. 아직도, 나는 세부 사항을 더하기 위하여 편집했다. 그것의 많지는 않지만, 실제로 그것은 내가 가진 전부입니다. 그것은 꽤 기본입니다. 내가 무슨 말하는지 알지? 내가해야하는 것보다 더 이상 기능을 호출하고 싶지 않습니다. – Dave

2

이 시도 : rubocop이에 껍질 것

if condition_that_doesnt_involve_my_func 
    # do stuff 
elsif answer = my_func(cur_line) 
    headers_found = answer 
end 

확실하지합니다. 나는 그것을 사용하지 않는다.

+0

"condition_that_doesnt_involve_my_func"가 true 인 경우 아무 것도 저장하지 않았습니다. taht가 해당되는 경우 솔루션은 "my_func"를 한 번 호출하지만 나열된 코드에서는 전혀 호출되지 않습니다. – Dave

+0

@Dave - 편집 – seph

+0

을 참조하십시오. 그래서 spickermann도 그 점을 만들고있었습니다. 기본적으로 선택의 여지가 있습니까 효율성이나 가독성을 가질 수 있지만 둘 다 가질 수 있습니까? 이 예제는 매우 기본적인 것처럼 보입니다. 둘 다 가질 수있는 방법이 있다고 생각 하겠지만, 아직 초보자입니다. – Dave

0

걱정되는 경우 headers_found에 반환 값을 할당하십시오. 그것은 결국 거짓 (headers_found.present? #false)이거나 헤더를 포함하게됩니다.

if condition_that_doesnt_involve_my_func 
    # do stuff 
else 
    headers_found = my_func(cur_line) 
end 
+0

불행히도 나는 이미 "else"절을 내 문장에 가지고 있는데, 그래서 "elsif"를 사용해야했습니다. – Dave

+0

내가 보지 못했다고 말하기가 어렵습니다 (...). 어쨌든 큰 if 전에 호출을 추가하고 한 번만 함수를 호출하려는 경우 거기에서 다시 작업 할 수 있습니다. 궁극적으로 당신은 뭔가를 읽을 수 있어야합니다. – s1mpl3

관련 문제