為程式撰寫了一些測驗代碼,試圖傳遞 2 個值,一個檔案和一個數字。下面的根本不起作用,但是如果我有類似的東西puts "test" (在案例之外),它就起作用了。
def read_album(music_file, number)
puts number #(this does something)
case number.to_i
when(number > 1)
puts "done"
when(number < 2)
puts "something"
when(number == 3)
puts "none of this inside case is working"
end
end
def main()
a_file = File.new("albums.txt", "r")
print("Choose album id: ")
choice_of_album = gets().to_i
read_album(a_file, choice_of_album)
end
main()
uj5u.com熱心網友回復:
你的cases 沒有按照你的想法去做。對給定的運算式when求值,結果將與case使用 case 相等運算子的值進行比較===。諸如此類的運算式的number > 1計算結果為true或false。將此結果與 Ruby 中的整數進行比較是沒有意義的。
您應該直接與常量進行比較。
case number
when 1
# handle 1
when 2
# handle 2
when 3
# handle 3
else
# handle unknown case; error?
end
請注意,其他類可能會覆寫===以提供有用的行為。在Range和Regexp類,例如,做到這一點。
case number
when 1..3
# handle 1, 2 and 3
end
case string
when /pattern/
# handle pattern
end
值得注意的是,Proc該類也這樣做!
def greater_than(n)
proc { |x| x > n }
end
case number
when greater_than(2)
# handle number > 2
end
uj5u.com熱心網友回復:
您需要number.to_i從 case 陳述句中洗掉。
或者做類似的事情
case number.to_i
when 1..2
puts "foo"
when 3..100
puts "bar"
else
puts "foobar"
end
end
來自 Ruby 檔案
Case 陳述句包含一個可選條件,它位于 case 的引數位置,以及零個或多個 when 子句。第一個匹配條件的 when 子句(或評估為布爾真值,如果條件為空)“獲勝”,并且它的代碼節被執行。case 陳述句的值是成功的 when 子句的值,如果沒有這樣的子句,則為 nil。
您的版本將評估為類似
if (number > 1) === number.to_i
并且由于您將數字與布爾運算式進行比較,因此不會評估為真。如果你在 case 陳述句中有一個 else 就會被呼叫。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330619.html
上一篇:從陣列生成哈希鍵和值ruby
下一篇:回傳按頂級域分組的哈希
