看板 Ruby 關於我們 聯絡資訊
※ 引述《BM0108 (衝)》之銘言: : 環境: : ruby 1.8.7 on windows : 狀況: : 各位前輩好,我是今天剛開始學ruby的新手 : 我在練習case功能時遇到一些小trouble : 我想要從命令列讀入3個數字,然後判斷是正數、負數抑或是0 : ================ : code: : list = [] : for i in 0..2 : list[i]=ARGV[i].to_i : case list[i] : when <0 : puts "positive" : when >0 : puts "negtive" : else : puts "it's zero" : end : end : command line: : D:\test>ruby array.rb 3 -9 0 : array.rb:7: syntax error, unexpected '<' : when <0 : ^ : array.rb:9: syntax error, unexpected kWHEN, expecting kEND : when >0 : ^ : array.rb:11: syntax error, unexpected kELSE, expecting kEND : array.rb:14: syntax error, unexpected kEND, expecting $end : =========================== : 我有試著在when後面加上list[i] : when list[i]>0 : when list[i]<0 : 這樣不會error,但是不論輸入啥,程式永遠都會跑else("it's zero") : 請問問題點在哪? : 謝謝! 你對ruby 的case 的概念不熟 case expr when val1 stmt1 when val2 stmt2 else stmt3 end 語意是當 expr 等於 val1 的時候,做stmt1 val2 stmt2 都不是的時候 做stmt3 以你的例子 case list[i] when list[i] < 0 puts "Less than zero" when list[i] > 0 puts "Bigger than zero" else puts "It's zero" end list[i] 會是一個數字 (exrp) 可是你的var1 和var2只會是true 或著false 所以不管怎樣都不會跟list[i]的值一樣 所以一定會執行else-part 也就是 puts "It's zero" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.67.182
BM0108:謝謝:) 可是list[i]>0 應該會傳回true或false呀 04/15 21:35
BM0108:就邏輯上說,把它回傳的bool值當您所謂的var 應該沒問題吧 04/15 21:36
rexkimta:他的意思是list[i]永不等於list[i]>0或<0 04/15 21:41
rexkimta:因為ruby裡的true和false並不像c一樣可以對應到數值。 04/15 21:42
BM0108:哦哦 豁然開朗! 謝謝樓上:) 04/15 21:50
SansWord:謝謝rexkimta的講解,我還得再努力把話說清楚一點。 04/16 06:29