0

たとえば、配列クラスには、次の構文で配列に対して呼び出す「.sort」という名前のメソッドがあります。

[2, 3, 4, 1].sort

私の限られた知識では、実際のパラメーターを受け取るメソッドの書き方しか知りません。

def sort(array)
   ...
end 

次のように呼ばれます。

sort([2, 3, 4, 1])

ドット表記 (間違っている場合は訂正してください) 構文で呼び出すことができるメソッドをどのようにセットアップしますか?

*明確にするために、重複オブジェクトを削除できるメソッドを既存のクラス配列に追加しようとしています。「.uniq」メソッドがすでにそれを行っていることは知っていますが、その方法を学ぶために書き直しています。私はそのようにメソッドを書く方法しか知りません:

def my_uniq(array)
   ...
end

ここで、配列はメソッド内で操作できるパラメーターです。

4

2 に答える 2

2

オブジェクトにメッセージを送信するという観点から考え始める必要があります。つまり、それらを呼び出しメソッドと見なす代わりに、それらを と見なしますsending message to object(s)。メッセージを送信すると、オブジェクトは要求を満たすことができるかどうかを確認します (つまり、その名前のメソッドがここまたはその親に存在するかどうかを確認します)。つまり、本質的には、オブジェクト sortへのメッセージ (メソッド)です。array

class Array
  def sort
    # do sorting
  end

  # example taken from @codycaughlan 
  # allows you to send message `hi` to your array object
  def hi
    "Hi, #{length}"
  end
end

# so instead of calling method hi([2,9,0]) 
# send hi message to an array object

[2,9,0].hi

# instead of calling method sort([2,9,0])
# send sort message to an array object

[2,9,0].sort

アップデート

*渡す数値を掛けて出力する配列で機能するメソッドを書きたいとしましょう。

class Array
  def print_stars
    self.each { |i| puts "*" * i}
  end
end

# now let us send a message / call
[1,2,3].print_stars #=> this should produce

*
**
***

すでにご存知かもしれませんが、これらのメッセージは連鎖する可能性があります。例えば

[1,2,3].reverse.print_stars  #=> produces

***
**
*
于 2013-08-31T08:41:58.090 に答える
0

それは「議論」が何であるかに依存します。あなたの例では:

[2, 3, 4, 1].sort

引数は のインスタンスですArray。モンキー パッチArrayを適用して、選択したメソッドを追加できます。

class Array
  def hi
    "Hi, #{length}"
  end
end

puts [1,2,3].hi

=> Hi, 3
于 2013-08-31T07:29:33.607 に答える