2014-09-29 45 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 

最後一位已經失去了....

在編程方面,這可能不是這樣做的最佳方式和異常是更好地報告錯誤那種情況下