我有这个类:数学与实例变量
class Account
attr_accessor :balance
def initialize(balance)
@balance = balance
end
def credit(amount)
@balance += amount
end
def debit(amount)
@balance -= amount
end
end
然后,例如,在后来的程序:
bank_account = Account.new(200)
bank_account.debit(100)
如果我打电话用的借记法“ - =”运营商它(如上面的类)的程序失败,出现以下消息:
bank2.rb:14:in `debit': undefined method `-' for "200":String (NoMethodError)
from bank2.rb:52:in `<main>'
但是,如果我去掉负号,并只让@bal ance =金额,那么它工作。显然我想要它减去,但我不明白为什么它不起作用。数学不能用实例变量来完成吗?
强制转换离子总是一个好主意,因为它允许你使用非数字的东西,但如果你问得好,*可能是数字。 – tadman
迈克尔 - 你的评论,我传递一个字符串到initialize()让我意识到我的问题在哪里。我在我的问题中使用了一个例子,但我实际上创建一个新类的方式来自于一个参数(ARGV)。当我运行该程序时,我输入类似“ruby bank2.rb 1000”的内容,然后用1000作为余额创建一个新账户。所以我现在的猜测是,也许参数总是作为字符串读入,这就是我的整个String问题来自的地方。除了initialize()以外,我在其他地方使用.to_i。今天下班后我会试一试。 – cliff900
@ cliff900是的,ARGV总是保存字符串。 –