if / elsif
를 사용해야 할 때마다 대신 Ruby case 문 사용을 고려할 수 있습니다. 이 게시물에서는 몇 가지 다른 사용 사례와 이 모든 것이 내부에서 실제로 어떻게 작동하는지 배울 것입니다.
<블록 인용>
참고:다른 프로그래밍 언어에서는 이를 스위치라고 합니다. 성명서.
Ruby의 case 문의 구성 요소:
키워드 | 설명 |
---|---|
케이스 | 케이스 문 정의를 시작합니다. 작업할 변수를 가져옵니다. |
언제 | 일치할 수 있는 모든 조건은 when 문입니다. |
기타 | 일치하는 것이 없으면 다음을 수행하십시오. 선택 사항입니다. |
루비 케이스 및 범위
case
진술은 첫눈에 보일 수 있는 것보다 더 유연합니다. 값이 속하는 범위에 따라 일부 메시지를 인쇄하려는 예를 살펴보겠습니다.
case capacity when 0 "You ran out of gas." when 1..20 "The tank is almost empty. Quickly, find a gas station!" when 21..70 "You should be ok for now." when 71..100 "The tank is almost full." else "Error: capacity has an invalid value (#{capacity})" end
이 코드는 if / elsif
버전은 다음과 같습니다.
루비 케이스 및 정규식
정규식을 when
으로 사용할 수도 있습니다. 상태. 다음 예에는 serial_code
가 있습니다. 이 제품이 얼마나 위험한지 알려주는 첫 글자와 함께.
case serial_code when /\AC/ "Low risk" when /\AL/ "Medium risk" when /\AX/ "High risk" else "Unknown risk" end
루비 케이스를 사용하지 말아야 할 경우
간단한 1:1 매핑이 있는 경우 다음과 같이 하고 싶을 수 있습니다.
case country when "europe" "https://eu.example.com" when "america" "https://us.example.com" end
제 생각에는 다음과 같이 하는 것이 좋습니다.
SITES = { "europe" => "https://eu.example.com", "america" => "https://us.example.com" } SITES[country]
해시 솔루션은 더 효율적이고 사용하기 쉽습니다. 생각하지 않나요?
케이스 작동 방식:===메소드
case
가 어떻게 후드 아래에서 작동합니다. 첫 번째 예로 돌아가면 다음과 같습니다.
(1..20) === capacity (21..70) === capacity (71..100) === capacity
보시다시피 Ruby가 ===
를 호출하기 때문에 조건이 반대입니다. 왼쪽에 있는 개체에. ===
모든 클래스에서 구현할 수 있는 메서드일 뿐입니다. 이 경우 Range
값이 범위 내에 있는 경우에만 true를 반환하여 이 메서드를 구현합니다.
===
Rubinius에서 구현됩니다(Range
클래스):
def ===(value) include?(value) end
출처:https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178
프로세스 + 케이스
===
를 구현하는 또 다른 흥미로운 클래스 Proc
입니다. 수업.
관련 게시물 :절차 및 람다에 대해 자세히 알아보세요.
이 예제에서는 두 개의 procs
를 정의합니다. , even
확인 숫자 및 odd
.
odd = proc(&:odd?) even = proc(&:even?) case number when odd puts "Odd number" when even puts "Even number" end
이것이 실제로 일어나고 있는 일입니다:
odd.===(number) even.===(number)
===
사용 proc에서 call
을 사용하는 것과 같은 효과가 있습니다. .
결론
Ruby case 문이 어떻게 작동하고 얼마나 유연할 수 있는지 배웠습니다. 이제 자신의 프로젝트에서 이를 최대한 활용할 차례입니다.
이 기사가 도움이 되었기를 바랍니다!
더 많은 사람들이 배울 수 있도록 이 게시물을 공유해주세요! 🙂