1

switch ステートメントのいずれかのケースが一致する場合は、2 次関数を実行したいと考えています。

現在、私はこれを持っています:

flag = false
switch day
  when "Mon"
     something1()
     flag = true
  when "Tue"
     something2()
     flag = true

  if flag
    hi()

を使用する必要がないように、これをクリーンアップする方法はありflagますか?

4

3 に答える 3

1

このような薄い例から判断するのは難しいですが、物事を再設計して を回避し、switchキーと値のペアのリストを単純に維持する方が理にかなっています。キーは「Mon」/「Tue」/etc であり、値は実行する関数です:

funcs =
  Mon: something1
  Tue: something2
  Wed: something3
  # etc ...

funcs[day]?() # invoke the matching function, if any

hi() if funcs[day] # invoke "hi" if there was a matching function

関数の呼び出しは、配列にインデックスを付けて?演算子を使用するだけの簡単な問題であり、配列内のキーの存在を簡単にテストして、 を実行するかどうかを知ることができますhi

于 2013-06-11T16:02:02.613 に答える
0

フラグの割り当てをスイッチの外に移動するという素晴らしい提案を使用することをお勧めしますが、フラグ変数の使用をなくすことが目標である場合は、関数 hi() の呼び出しを各ケースに配置することで実行できます。以下に示すようにフラグを設定します。

switch day
  when "Mon" 
     something1()
     hi()
  when "Tue" 
     something2()
     hi()
  else 
     notHi()

フラグが false に設定されているときに何かを行う必要がある場合に役立つ可能性があるため、else ケースが追加されました。

于 2013-06-10T17:26:42.053 に答える