ruby - 对“自我”的这种使用感到非常困惑;'参数.方法'
问题描述
代码如下;这是教科书中的一个例子。问题:
为什么它会“退回 10.miles.back”?由于该行不在 Numeric 类之外,不应该是“puts Numeric.10.miles.back”吗?
我读过“自我”指的是包含类。那么它是如何在这里充当一个数字的呢?
如果我从第一个调用的方法中删除“self *”,代码似乎仍然工作完全相同。那么它在那里做什么呢?
我似乎无法将这些方法中的任何一个转换为接受参数的普通方法。它输出错误报告该方法未定义。
我猜 number.method 是一种传递参数的方式。这种语法叫什么?
class Numeric
def inches
self
end
def feet
self * 12.inches
end
def yards
self * 3.feet
end
def miles
self * 5280.feet
end
def back
self * -1
end
def forward
self
end
end
puts 10.miles.back
解决方案
在 ruby 中,基本上一切都是类的实例。在这种情况下,数字文字是Numeric
. 此代码重新打开该类并向其添加方法。这为您的程序中的所有数字提供了这些方法。
No.
10
是 的一个实例Numeric
,因此具有刚刚添加的所有公共方法,包括一个miles
方法。10.miles
调用刚刚添加的 的miles
方法。10
“我读过‘self’指的是包含类。” 那不准确。
self
指的是正在执行其方法的对象。当您调用"a,b,c".split(',')
时,它将调用split
字符串对象上的方法,并且在该方法内部self
将引用字符串"a,b,c"
。self *
第一种方法中没有,但如果你的意思是self *
indef miles
,那么它只是乘法。请记住,self
在这些方法中是一个数字。所以10.miles
结果是10 * 5280.feet
,它返回一个代表 10 英里的数字。添加一个参数应该可以正常工作,只要您在调用它时提供一个参数:
class Numeric
def miles(arg)
puts "got an arg #{arg}"
self * 5280.feet
end
end
10.miles("some argument")
number.method
是调用(或调用)方法的一种方式。10.miles.back
有效,因为您在 number 上调用该miles
方法,该方法10
返回一个不同的数字。然后你调用back
那个号码的方法。
推荐阅读
- swift - 如何在 CoreML 中访问模型的描述?
- php - MySQL CASE 语句在 Workbench 和 Angular 中返回不同的结果
- regex - 需要有关正则表达式的帮助
- php - 搜索 Laravel 等价物
- reactjs - ref.current 总是未定义?
- python - 在python中删除包含“#”、“@”或“:”等符号的单词
- mysql - 在存储过程中使用临时表是一种好习惯,还是应该使用视图?
- php - Prestashop 1.7 禁用支付
- android - Android Studio 中模拟器的“qemu.conf:1: no group defined”崩溃
- node.js - Truffle 插件验证在全局或本地节点模块中未找到