2011-09-12 49 views
0
switch @user && @other 
    when 'user' && true 
     ... 
    when 'user2' && false 
     ... 

是這樣的可能嗎?由於某種原因,它不工作。謝謝!CoffeeScript多值開關語句?

+1

你能定義「不工作」嗎?該代碼編譯好。或者你是否期望它將'user'與''user''和'@ other'與'true'進行比較?如果是這樣的話,就沒有辦法讓'switch'去做你想做的事情;你應該使用'if' /'else'或者寫一個函數。 –

+0

好的。是的,我希望用戶比較'用戶'和其他的真實。 – fancy

回答

1

很遺憾JS不認爲[1, 2] === [1, 2](因爲它們是不同的引用);否則你可以使用數組來做你想做的事情。

相反,這裏是一個函數:

multiSwitch = (values, cases...) -> 
    for c in cases 
    match = true 
    for i in [0...values.length] 
     unless c[i] is values[i] 
     match = false 
     break 
    return c[values.length]() if match 
    return 

使用方法如下:

multiSwitch [@user, @other], 
    ['user', true, -> 
    console.log 'case 1' 
    ] 
    ['user2', false, -> 
    console.log 'case 2' 
    ] 

取決於你在做什麼,它可能更容易,比如,串聯您的多個值成一個字符串,並做一個switch

+0

謝謝Trevor! – fancy