if step.include? "apples" or "banana" or "cheese"
say "yay"
end
回答
你的代碼的幾個問題。
step.include? "apples" or "banana" or "cheese"
該表達式的計算結果爲:
step.include?("apples") or ("banana") or ("cheese")
由於Ruby對待比false
和nil
爲真以外的值,這個表達式永遠是正確的。 (在這種情況下,該值"banana"
將short-circuit的表達,導致其評估爲真,即使步長的值不包含任何這三個。)
你的意圖是:
step.include? "apples" or step.include? "banana" or step.include? "cheese"
但是,這是低效的。它也使用or
而不是||
,它具有不同的運算符優先級,通常不應在if
條件中使用。
普通or
用法:
do_something or raise "Something went wrong."
寫這更好的辦法將是:
step =~ /apples|banana|cheese/
這將使用regular expression,你打算在Ruby中使用了很多。
最後,還有在Ruby中沒有say
方法,除非你定義一個。通常你會打電話給puts
打印一些東西。
所以最終的代碼如下所示:
if step =~ /apples|banana|cheese/
puts "yay"
end
我是否添加了/ i不區分大小寫?這就像正則表達式? TY。 – gpwu 2009-10-28 02:52:17
是的,這將是'step =〜/ /蘋果|香蕉|奶酪/我' – 2009-10-28 03:15:45
後兩個術語似乎對Ruby來說是真實的,而不是與include?
短語有任何關係。
假設step
是一個字符串...
step = "some long string with cheese in the middle"
你可以寫這樣的事情。
puts "yay" if step.match(/apples|banana|cheese/)
這絕對不是你想要的東西。 include?
方法需要String
,這不是"apples" or "banana" or "cheese"
生成的。試試這個:
puts "yay" if ["apples", "banana", "cheese"].include?(step)
但目前還不清楚從應該哪一步是上下文。如果它只是單個單詞,那麼這很好。如果它可以是一個完整的句子,請嘗試joel.neely的答案。
這裏有一個方法來調用每個參數step.include?
直到其中一個返回true
:
if ["apples", "banana", "cheese"].any? {|x| step.include? x}
我會添加一些括號內爲您提供:
if (step.include? "apples") or ("banana") or ("cheese")
say "yay"
end
(這將是爲什麼它總是說「耶」 - 因爲表達將永遠是真的。)
最接近的事到語法,會做你看起來是想會是這樣的:
if ["apples", "banana", "cheese"].include?(step)
puts "yay"
end
但其他建議之一使用正則表達式會更加簡潔和可讀。
我想補充另一面,這...
如果step
爲的Array
(如呼叫include?
似乎暗示),那麼也許代碼應該是:
if (step - %w{apples banana cheese}) != step
puts 'yay'
end
最容易混淆和計算密集的變體。 – 2009-10-28 15:30:13
我不知道有關混淆。這很愚蠢。就「計算密集型」......好吧,我並沒有將精力投入到高效的算法中,但它並沒有那麼糟糕。 – rfunduk 2009-10-29 00:55:33
假設step
是一個Array
或Set
或別的東西,支持交集與&
運營商,我認爲下面的代碼是最地道:
unless (step & ["apples","banana","cheese"]).empty?
puts 'yay'
end
- 1. 這是有效的ruby語法嗎?
- 2. 這是一個有效的jQuery語句?
- 3. 這是一個有效的XML嗎?
- 4. 什麼是int(a)(1)?這是一個有效的c + +語法?
- 5. 這是否是有效的Elixir語法?
- 6. 這是否是有效的PHP語法?
- 7. Typescript - 這是一個撰寫語法嗎?
- 8. 這是一個語法錯誤嗎?
- 9. 這是一個parseInt的有效方法嗎?
- 10. 這是一個有效的PHP數組訪問方法嗎?
- 11. 這是一個有效的html5標記方法嗎?
- 12. 這個GPGSV語句有效嗎?
- 13. 這是無效的語法?
- 14. 這是intrusive_ptr的有效用法嗎?
- 15. 這是DIP(SOLID)的有效用法嗎?
- 16. 這是最有效的方法嗎?
- 17. 這是有效的對象propery創建語法嗎?
- 18. 這是jQuery的語法在Java中有效嗎?
- 19. 這是什麼Ruby語法?
- 20. 這個有效的語法如何?
- 21. 這個有效的BNF語法?
- 22. 這是有效的JSON嗎?
- 23. 這是有效的XML嗎?
- 24. 這是有效的yaml嗎?
- 25. jQuery:有一個更有效的方法來做到這一點,不是嗎?
- 26. 爲什麼這個語法有效?
- 27. 這個技巧總是有效嗎?
- 28. 這個語法不是LR(1)嗎?
- 29. 這是語法單反嗎?
- 30. 這是一種編碼MVC服務層的有效方法嗎?
您可以檢查自己通過獲取IDE,可以使用Ruby工作。 – KdgDev 2009-10-28 02:50:10
當你不需要IDE時,不要浪費你的時間。 irb是檢查這種東西的正確方法。 – 2009-10-28 06:49:38