Ruby 对'的这种用法感到非常困惑;自我'';参数。方法';
代码如下;这是教科书上的一个例子。问题:Ruby 对'的这种用法感到非常困惑;自我'';参数。方法';,ruby,Ruby,代码如下;这是教科书上的一个例子。问题: 为什么它“放10英里回来”?既然那一行在类Numeric之外,它不应该是“puts Numeric.10.miles.back”吗 我读过“self”指的是包含类。那么它在这里是如何作为一个数字的呢 如果我从调用的第一个方法中删除“self*”,代码的工作方式似乎仍然完全相同。那么它在那里做什么呢 我似乎无法将这些方法中的任何一个转换为接受参数的普通方法。它输出一个错误,报告方法未定义 我猜number.method是传递参数的一种方式。这个语法叫什么
在ruby中,基本上一切都是一个类的实例。在本例中,数字文字是
数值的一个实例。这段代码重新打开该类并向其添加方法。这将为程序中的所有数字提供这些方法
否。10
是Numeric
的一个实例,因此刚刚添加了所有公共方法,包括miles
方法10.miles
调用刚才添加的10
的miles
方法
“我读到‘self’指的是包含类。”这不准确<代码>自身
是指其方法正在执行的对象。当您调用“a,b,c”.split(',')
时,将调用string对象上的split
方法,并且在该方法内部self
将引用字符串“a,b,c”
self*
,但是如果你指的是def miles
中的self*
,那么它就是乘法。记住,self
在这些方法中是一个数字。因此,10.miles
产生10*5280.feet
,返回一个表示10英里的数字number.method
是调用(或调用)方法的一种方式10.miles.back
之所以有效,是因为您对编号10
调用了miles
方法,该方法返回不同的编号。然后您对该号码回拨方法
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
class Numeric
def miles(arg)
puts "got an arg #{arg}"
self * 5280.feet
end
end
10.miles("some argument")