1

如果我的 switch 语句中的任何情况匹配,我想运行辅助函数。

目前,我有这个:

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

  if flag
    hi()

有没有办法清理它,这样我就不必使用了flag

4

3 回答 3

2

您不必flag = true在所有情况下都使用:仅在default子句 ( else) 中设置它。

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

if shouldRun
  hi()
于 2013-06-10T17:26:23.993 回答
1

从这样一个薄弱的例子中很难看出,但重新架构事物以避免switch和简单地维护一个键/值对列表可能更有意义,其中键是“Mon”/“Tue”/etc 和values 是要执行的函数:

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()

添加了 else 案例,因为如果您在标志设置为 false 时需要做某事,它可能会很有用。

于 2013-06-10T17:26:42.053 回答