作者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
1F:推 BM0108:谢谢:) 可是list[i]>0 应该会传回true或false呀 04/15 21:35
2F:→ BM0108:就逻辑上说,把它回传的bool值当您所谓的var 应该没问题吧 04/15 21:36
3F:推 rexkimta:他的意思是list[i]永不等於list[i]>0或<0 04/15 21:41
4F:→ rexkimta:因为ruby里的true和false并不像c一样可以对应到数值。 04/15 21:42
5F:推 BM0108:哦哦 豁然开朗! 谢谢楼上:) 04/15 21:50
6F:→ SansWord:谢谢rexkimta的讲解,我还得再努力把话说清楚一点。 04/16 06:29