Javascript 如果我的任何开关盒匹配,如何运行附加功能?
如果switch语句中的任何情况匹配,我想运行一个辅助函数 目前,我有:Javascript 如果我的任何开关盒匹配,如何运行附加功能?,javascript,coffeescript,switch-statement,Javascript,Coffeescript,Switch Statement,如果switch语句中的任何情况匹配,我想运行一个辅助函数 目前,我有: flag = false switch day when "Mon" something1() flag = true when "Tue" something2() flag = true if flag hi() 有没有一种方法可以清理这个问题,这样我就不必使用标志了?您不必在所有情况下都使用标志=true:仅在默认子句(其他)中设置它 尽管我建议使用ni
flag = false
switch day
when "Mon"
something1()
flag = true
when "Tue"
something2()
flag = true
if flag
hi()
有没有一种方法可以清理这个问题,这样我就不必使用
标志了?您不必在所有情况下都使用标志=true
:仅在默认
子句(其他
)中设置它
尽管我建议使用nice建议将标志分配移出开关,但如果您的目标是消除标志变量的使用,则可以在设置标志的每种情况下调用函数hi(),如下所示:
switch day
when "Mon"
something1()
hi()
when "Tue"
something2()
hi()
else
notHi()
添加了else case,因为当您的标志设置为false时,如果您需要执行某些操作,它可能会很有用。很难从这样一个简单的示例中分辨出来,但是重新构建东西以避免开关
并简单地维护一个键/值对列表,其中键是“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
,这不是默认情况的目的吗?@Zenith default我认为如果它与任何开关都不匹配,就会运行。它就像一个通球。我想我是在寻找与默认相反的方法。这是一个很好的建议,但它会重命名标志,而不是取消其用法……虽然您可以在
s时将hi
调用放入所有中,但我认为这种方法更干净。关键不在于去掉某些标志,而是要防止代码重复。我同意这是一种比重复调用hi()函数更好的方法。要么然后或者应该删除下一个换行符。您当前的代码是无效的CoffeeScript。这是个好主意。switch语句非常适合当前的结构,但这是一个好主意。
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