您好我正在查看ruby测验解决方案(http://rubyquiz.com/quiz76.html),这对我来说很有意义,但我无法理解为什么没有{{1}或self
中方法shift, pop, scramble
的任何类型的接收器:
munge_word
是因为它打开了Array类并为其添加了函数吗?这些方法是类方法吗?我认为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
的语法只是简单的多个变量赋值。我从来没有见过一方用方法。有人可以解释一下吗?
答案 0 :(得分:4)
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
答案 1 :(得分:2)
self始终是可选的实例方法的接收器。换句话说,裸实例方法调用总是被视为指向自我。
因此,由于括号也是可选的,shift
是一个方法调用,它被认为是self.shift
。由于self
是一个数组(因为这些是已经打开Array类的实例方法),我们告诉一些数组要转移。等等。