我是 Ruby 新手,目前正在尝试我用作指南的 Ruby 书中的一些示例:
class Account
attr_accessor :balance
def initialize(balance)
@balance = balance
end
end
class Transaction
def initialize(account_a, account_b)
@account_a = account_a
@account_b = account_b
end
def debit(account,amount)
account.balance -= amount
end
def credit(account,amount)
account.balance += amount
end
def transfer(amount)
debit(@account_a, amount)
credit(@account_b, amount)
end
end
savings = Account.new(100)
checking = Account.new(200)
trans = Transaction.new(checking, savings)
trans.transfer(60)
puts savings.balance
puts checking.balance
这是一个非常简单的示例,在同一个脚本文件中包含两个类。我对传递给 credit 和 debit 方法的参数类型感到困惑。来自 Java,我仍然在考虑类型,所以很明显,我传递给的帐户变量的类型,比如借方方法,必须是 Account 类型。
由于 ruby 是动态类型的并且不检查类型,我如何安全地对我传递的参数进行操作,并通过以下方式定义方法的其余部分: account.balance -+ amount ?
我想了解,如果我将对帐户以外的对象的引用传递给借方方法,会有什么样的安全性?
当定义以下方法的主体时,它使用给定的参数帐户。现在,我想我在重复自己,因为我仍然无法理解这个想法......我怎样才能使用参数帐户(可以是任何类型,因为没有人在检查)并使用点建立一些逻辑运算符,询问其实例变量,或调用其其他方法,并对可能或可能不是正确种类(或类型)的对象执行计算?当然,隐含地,我希望它是 Account 类型。
def credit(account,amount)
account.balance += amount
end
另外,如果我在不同的文件中声明这两个类,相同的示例将如何工作?
为新手问题提前诚挚道歉,我只是发现很难将我的思想包裹在动态类型上——或者更好的是,没有类型检查。这本书要么对此有点含糊,要么我无法通过仅用Java思考来动摇我的视野。
任何实际的解释将不胜感激。