Re: [問題] case比較數字大小

看板Ruby作者 (是妳)時間13年前 (2011/04/15 00:16), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串2/6 (看更多)
※ 引述《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

04/15 21:35, , 1F
謝謝:) 可是list[i]>0 應該會傳回true或false呀
04/15 21:35, 1F

04/15 21:36, , 2F
就邏輯上說,把它回傳的bool值當您所謂的var 應該沒問題吧
04/15 21:36, 2F

04/15 21:41, , 3F
他的意思是list[i]永不等於list[i]>0或<0
04/15 21:41, 3F

04/15 21:42, , 4F
因為ruby裡的true和false並不像c一樣可以對應到數值。
04/15 21:42, 4F

04/15 21:50, , 5F
哦哦 豁然開朗! 謝謝樓上:)
04/15 21:50, 5F

04/16 06:29, , 6F
謝謝rexkimta的講解,我還得再努力把話說清楚一點。
04/16 06:29, 6F
文章代碼(AID): #1Dfnt0pQ (Ruby)
文章代碼(AID): #1Dfnt0pQ (Ruby)