作者SansWord (是妳)
看板Ruby
標題Re: [問題] case比較數字大小
時間Fri Apr 15 00:15:57 2011
※ 引述《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