java – ruby??中的对象引用类型
我是
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 这是一个非常简单的示例,在同一个脚本文件中包含两个类.我对传递给信用卡和借记卡方法的论证类型感到困惑.来自Java,我仍然在类型方面,所以很明显我传递给帐户变量的类型,比如借记方法,必须是Account类型. 由于ruby是动态类型的,并且没有检查类型,我如何安全地操作我传递的参数,并通过说:account.balance – amount来定义方法的其余部分? 我试图理解,如果我向借记方法传递对账户以外的对象的引用,会有什么样的安全性? 当定义下面方法的主体时,它使用给定的参数帐户.现在,我想我正在重复自己,因为我仍然无法理解这个想法…我怎样才能把参数帐户(可以是任何类型,因为没有人检查)并使用点构建一些逻辑运算符,请求其实例变量,或调用其他方法,并对可能或可能不是正确类型(或类型)的对象执行计算?当然,隐含地,我希望它是Account类型. def credit(account,amount) account.balance += amount end 另外,如果我在不同的文件中声明这两个类,那么同样的例子会如何工作? 真诚地为新手问题道歉,我发现很难围绕动态打字 – 或者更好,没有类型检查.这本书要么有点模糊,要么我只能用java思考,不能动摇我的隧道视野. 任何实际的解释将不胜感激. 解决方法
Ruby中没有任何类型安全性.对Ruby而言,最重要的是对象是否可以响应它收到的消息.你可以传递一些完全没有意义的东西,Ruby也不会做任何事情来阻止你.但是如果传入的对象不响应您正在发送的消息(在这种情况下),当代码尝试发送无效消息时,您将收到NoMethodError.
一般来说,解决方法是:不要传入错误的类型.它知道它听起来很弱,但这几乎是你需要做的 – 确保你传递正确的东西.为您的程序编写测试,以确保您正在做您想做的事情. Ruby在单元测试方面非常重要.如果你真的担心一个参数是正确的东西,你可以显式检查它的类(引发’WTF?’除非object.class == String)或者你可以尝试将它转换为正确的类(通过定义to_foo类型的方法). 作为回报,你基本上不再关心类型.只要对象响应你发送的消息,你输入的内容就没关系.这使得模拟和代理之类的东西变得非常简单. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – Spring是否为执行Hystrix命令的线程提供SecurityCo
- 关于Java泛型的Oracle之一的潜在问题
- java – 在Wicket 1.5(.2)中没有在url上重新加载的组件?
- java – 我可以静态导入私有子类吗?
- java – 访问DownloadProvider时避免SecurityException
- Spring Boot高级教程之使用Redis实现session共享
- java – BaseGameUtils无法将GoogleApiClient.ApiOptions解
- java – 如何在谷歌应用引擎中制作常驻实例?
- Java实现的基于socket通信的实例代码
- java – 错误R10(引导超时) – > Web进程在启动后60秒内无法