如果我的任何开关案例匹配,我该如何运行附加功能?

时间:2013-06-10 17:23:08

标签: javascript coffeescript switch-statement

如果我的switch语句中的任何一个案例都匹配,我想运行一个辅助函数。

目前,我有这个:

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

  if flag
    hi()

有没有办法清理它,以便我不必使用flag

3 个答案:

答案 0 :(得分:2)

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

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

if shouldRun
  hi()

答案 1 :(得分: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。 / p>

答案 2 :(得分:0)

虽然我建议使用关于将标志分配移出开关的好建议,如果你的目标是消除标志变量的使用,可以通过在每种情况下调用函数hi()来完成你在哪里设置标志如下所示:

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

添加了else案例,因为如果您在标志设置为false时需要执行某些操作可能会有用。