이것은 @ sethcall의 답변으로 확실히 읽을 수없는,하지만 당신은 몇 가지 루비 관용구 알고있는 경우가 꽤 읽을 수 있어야한다 :
을210
detect
은 블록이 false를 반환하지 않는 첫 번째 결과를 반환합니다. 이것이 조건문을 피하는 이점이 있습니다. 위의 대답에 ||
없이하고 싶은 경우에, 당신이 할 수 있습니다 :
def get_let(response)
responses = [response.css('A'), response.css('B')]
responses.detect(-> { '' }) { |response| !response.empty? }
end
그래도, 첫 번째 해결 방법으로 거의 직관적으로 그 두 번째 해결책을 찾을 수 없습니다. 빈 문자열을 인수로 지정할 수 있다면 좋을 것입니다. 그러나 detect
및 그 별칭 인 find
에 대한 인수는 nil
이거나 람다 또는 proc와 같은 call
메서드에 응답해야합니다. 기본 값이기 때문에 nil
을 전달할 아무런 이유가 없습니다.
def get_let(response)
responses = [response.css('A'), response.css('B')]
responses.detect(&:any?) || ''
end
how detect
works을에 대한 자세한 내용을 루비 문서를 참조하십시오 : 당신이 response.css 방법은 그것에 nil
또는 false
값으로 배열을 반환하지 않을 것을 확실히 알았다면
, 당신은이 솔루션을 시도 할 수 . 다음은 docs on any?
입니다.
무엇이 당신의 질문입니까? – sawa