我真的不明白 price =(amount)方法中以下条件测试的实用性......
class Ticket
attr_accessor :price
def initialize(price)
@price=price
puts "The price is #{price}"
end
def price=(amount)
if (amount*100).to_i==amount*100
@price=amount
puts "The new price is #{amount}"
else
puts "The price seems to be malformed"
end
end
end
x=Ticket.new(21)
x.price=100.22
如何检查输入是否格式错误?我是初学者,抱歉。我不能理解它背后的逻辑。
答案 0 :(得分:1)
你尝试弄清楚了什么?
第一步是打开Ruby的IRB(或Pry)并输入有问题的部分并捅它。例如,这就是我在Pry中捅它时得到的结果:
[1] (pry) main: 0> amount = 1
1
[2] (pry) main: 0> (amount*100).to_i==amount*100
true
[3] (pry) main: 0> amount = 1.0
1.0
[4] (pry) main: 0> (amount*100).to_i==amount*100
true
[5] (pry) main: 0> amount = 0.1
0.1
[6] (pry) main: 0> (amount*100).to_i==amount*100
true
[7] (pry) main: 0> amount = 0.001
0.001
[8] (pry) main: 0> (amount*100).to_i==amount*100
false
在查看输出后,发生了什么?
答案 1 :(得分:0)
由于Ruby没有强类型,我似乎试图验证两件事:
换句话说,检查确认数字为两位数的数字与原始数字相同。
例:
(5.331*100)=533.1
(5.331*100).to_i=533
最后一位数字已丢失....
在编程方面,这可能不是最好的方法,在这种情况下报告错误的例外情况更好