您好,我目前正在研究一个ruby测验解决方案(http://rubyquiz.com/quiz76.html),它对我来说很有意义,但我很难理解为什么munge_word中的方法shift, pop, scramble没有self或任何类型的接收器
class Array
def munge_each
map { |word| word.split(//).munge_word }
end
def munge_word
first, last, middle = shift, pop, scramble
"#{first}#{middle}#{last}"
end
def scramble
sort_by{rand}
end
end是因为它打开了Array类并向其中添加了函数吗?这些方法是类方法吗?我认为var1, var2 = var3, var4的语法只是为了简洁地对变量进行多重赋值。我从来没有见过只有一方的方法。有人能解释一下吗?
发布于 2012-12-11 05:13:33
first, last, middle = shift, pop, scramble这基本上等同于
first = shift
last = pop
middle = scramble接收方(对于shift、pop和scramble方法)是隐式的,它是self。它是Array的一个实例,因为munge_word是一个实例方法。
,我从来没有见过用方法来解决这个问题。
变量,方法--这些都无关紧要。右边的值只需要是表达式的列表(或数组)。任何表达式。看:
x = 1
a, b = (x * 2), (x / 0 rescue 5)
a # => 2
b # => 5发布于 2012-12-11 09:51:26
self始终是可选的,作为实例方法的接收者。换一种方式来说,一个空的实例方法调用总是被认为是指向自己的。
因此,由于括号也是可选的,因此shift是一个方法调用,并且被认为是self.shift。由于self是一个数组(因为这些方法是在打开数组类的地方定义的实例方法),所以我们告诉一些数组进行移位。诸若此类。
https://stackoverflow.com/questions/13809325
复制相似问题