首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个方法没有接收器呢?

为什么这个方法没有接收器呢?
EN

Stack Overflow用户
提问于 2012-12-11 05:11:01
回答 2查看 57关注 0票数 0

您好,我目前正在研究一个ruby测验解决方案(http://rubyquiz.com/quiz76.html),它对我来说很有意义,但我很难理解为什么munge_word中的方法shift, pop, scramble没有self或任何类型的接收器

代码语言:javascript
复制
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的语法只是为了简洁地对变量进行多重赋值。我从来没有见过只有一方的方法。有人能解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 05:13:33

代码语言:javascript
复制
first, last, middle = shift, pop, scramble

这基本上等同于

代码语言:javascript
复制
first = shift
last = pop
middle = scramble

接收方(对于shiftpopscramble方法)是隐式的,它是self。它是Array的一个实例,因为munge_word是一个实例方法。

,我从来没有见过用方法来解决这个问题。

变量,方法--这些都无关紧要。右边的值只需要是表达式的列表(或数组)。任何表达式。看:

代码语言:javascript
复制
x = 1

a, b = (x * 2), (x / 0 rescue 5)

a # => 2
b # => 5
票数 4
EN

Stack Overflow用户

发布于 2012-12-11 09:51:26

self始终是可选的,作为实例方法的接收者。换一种方式来说,一个空的实例方法调用总是被认为是指向自己的。

因此,由于括号也是可选的,因此shift是一个方法调用,并且被认为是self.shift。由于self是一个数组(因为这些方法是在打开数组类的地方定义的实例方法),所以我们告诉一些数组进行移位。诸若此类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13809325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档