각 'when' 블록에 여러 값이 포함된 사례 문장
제가 찾고 있는 것을 설명할 수 있는 가장 좋은 방법은 지금까지 시도한 실패한 코드를 보여주는 것입니다.
case car
when ['honda', 'acura'].include?(car)
# code
when 'toyota' || 'lexus'
# code
end
저는 4~5가지 정도의 차이가 있습니다.when
약 50개의 다른 가능한 값에 의해 촉발되어야 하는 상황car
이것을 할 수 있는 방법이 있습니까?case
블록을 하거나 거대한 것을 시도해야 합니다.if
블록?
인어case
문, a,
의 값과 같습니다.||
순식간에if
진술.
case car
when 'toyota', 'lexus'
# code
end
Ruby 케이스 문으로 할 수 있는 몇 가지 다른 작업
루비의 "스플랫" 또는 플랫화 구문을 활용할 수 있습니다.
이것은 너무 커집니다.when
절 - 제가 올바르게 이해했다면 분기당 약 10개의 값을 테스트해야 합니다. 제 생각에는 조금 더 읽기 쉬운 것 같습니다.또한 런타임에 테스트할 값을 수정할 수 있습니다.예:
honda = ['honda', 'acura', 'civic', 'element', 'fit', ...]
toyota = ['toyota', 'lexus', 'tercel', 'rx', 'yaris', ...]
...
if include_concept_cars
honda += ['ev-ster', 'concept c', 'concept s', ...]
...
end
case car
when *toyota
# Do something for Toyota cars
when *honda
# Do something for Honda cars
...
end
또 다른 일반적인 접근 방식은 해시를 각 값에 대한 키가 있는 디스패치 테이블로 사용하는 것입니다.car
및 실행할 코드를 캡슐화하는 호출 가능 개체인 값입니다.
스위치/대소문자(case/when 등)는 값을 비교하는 것에 불과합니다.단순한 문자열 목록 비교에 대해서는 이 경우 공식 답변을 원하지만, 보다 이국적인 조건부/일치 논리에 대해서는
case true
when ['honda', 'acura'].include?(car)
# do something
when (condition1 && (condition2 || condition3))
# do something different
else
# do something else
end
논리를 데이터에 적용하는 또 다른 좋은 방법은 다음과 같습니다.
# Initialization.
CAR_TYPES = {
foo_type: ['honda', 'acura', 'mercedes'],
bar_type: ['toyota', 'lexus']
# More...
}
@type_for_name = {}
CAR_TYPES.each { |type, names| names.each { |name| @type_for_name[type] = name } }
case @type_for_name[car]
when :foo_type
# do foo things
when :bar_type
# do bar things
end
(@pilcrow의 대답에서 영감을 받아) 당신은 다음과 같은 것을 할 수 있습니다.
honda = %w[honda acura civic element fit ...]
toyota = %w[toyota lexus tercel rx yaris ...]
honda += %w[ev_ster concept_c concept_s ...] if include_concept_cars
case car
when *toyota
# Do something for Toyota cars
when *honda
# Do something for Honda cars
...
end
사례 문장에서 if 문장의 &&에 해당합니다.
case coding_language when 'orr' & & 'codice_script' # code end
언급URL : https://stackoverflow.com/questions/10197254/case-statement-with-multiple-values-in-each-when-block
'source' 카테고리의 다른 글
bash에서 여러 백그라운드 명령을 한 줄로 실행하려면 어떻게 해야 합니까? (0) | 2023.06.04 |
---|---|
iPhone 시뮬레이터에서 호스트 시스템 자체에 액세스하는 방법 (0) | 2023.06.04 |
워크북에서 워크시트를 반복하는 방법, openpyxl (0) | 2023.06.04 |
이클립스:동일한 편집기 탭을 사용하여 여러 검색에서 연 파일 (0) | 2023.06.04 |
jQuery Ajax 요청이 Internet Explorer에서 캐시되지 않도록 방지하는 방법은 무엇입니까? (0) | 2023.06.04 |