0

こんにちは、私は現在、ルビー クイズ ソリューション (http://rubyquiz.com/quiz76.html) を検討しています。これは理にかなっていますが、なぜ 1selfつまたはすべてのタイプの受信機がないのか理解に苦しんでいます。shift, pop, scrambleのメソッドmunge_word:

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の構文は、変数の複数の割り当てを簡潔にするためのものだと思いました。一方のメソッドでそれが行われるのを見たことがありません。誰か説明できますか?

4

2 に答える 2

4
first, last, middle = shift, pop, scramble

これは本質的に同等です

first = shift
last = pop
middle = scramble

レシーバー(shiftpopおよびscrambleメソッドの場合)は暗黙的であり、ですself。はインスタンスメソッドArrayであるため、これはのインスタンスです。munge_word

私はそれが一方の方法で行われるのを見たことがありません。

変数、メソッド-それは問題ではありません。右側の値は、式のリスト(または配列)である必要があります。任意の表現。見て:

x = 1

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

a # => 2
b # => 5
于 2012-12-10T21:13:32.620 に答える
2

self は、インスタンス メソッドのレシーバーとして常にオプションです。別の言い方をすれば、生のインスタンス メソッドの呼び出しは、常に自分自身に向けられていると見なされます。

したがって、括弧もオプションであるため、shiftはメソッド呼び出しであり、 を意味しself.shiftます。は配列であるためself(これらは Array クラスが開かれた場所で定義されたインスタンス メソッドであるため)、一部の配列にシフトするように指示しています。等々。

于 2012-12-11T01:51:25.737 に答える