2014-09-29 19 views
0

我真的不明白价格=(量)方法内下列条件测试的实际效用......这个条件测试真的做什么?

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

当遇到你不明白的代码时,特别是当它很简单时,最好的方法就是玩电脑。选择一组值发送到'price =',如int,各种值,字符串,nils等的浮点数。然后查看每个值。 – 2014-09-30 15:19:59

回答

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 

看完那个输出后,发生了什么?

+0

另外,如果'ammount ='1'' ... – BroiSatse 2014-09-29 16:02:15

0

随着Ruby不是强类型,它在我看来,试图验证两件事情:

  • 输入是整数或浮点数
  • 没有超过两位数(53.31是NOK ,而5.33是OK)

换言之,检查验证结算为两个数字的数字是否与原始数字相同。

例:

(5.331*100)=533.1 
(5.331*100).to_i=533 

最后一位已经失去了....

在编程方面,这可能不是这样做的最佳方式和异常是更好地报告错误那种情况下