source

각 'when' 블록에 여러 값이 포함된 사례 문장

manysource 2023. 6. 4. 10:38

각 '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