2011-12-31 11 views
2

私はRubyを学び始めています。私はその方法を参考にして渡された議論を読んでいますが、私はこれら2つの方法の違いを理解していません。 *を使用してこれらの2つのメソッドパラメータ定義の違いは何ですか?

def print(text) 
    puts text 
end 

def print(*text) 
    puts text 
end 

たちはCのようにポインタを渡していることを意味しますか?

答えて

5

*テキストは、Rubyでスプラット演算子と呼ばれるものです。基本的には、複数の引数を2番目のプリントに渡すと、1つのテキスト変数にスラップされます。

The Splat Operator in Ruby

4

Rubyパラメータリストのパラメータ名がvariable length argumentsになる前に*が使用される前に、それらはvarargsのC/C++の...に似ています。

def vlaFunc(*args) 
    puts args 
end 

vlaFunc(1,2,3) 

# output is [1,2,3] 
+0

ありがとうございます。 –

2

ルビー、*にはポインタがこのコンテキストではありませんが、一般的に "スプラット" 演算子と呼ばれて参照してくださいに

この場合、メソッドは任意の数の引数を取ることができます。配列textにあります。

+0

私はむしろルビに*唯一のポインタがあると言うでしょう:-) –

+0

Hehe、誰かがそれを言うかもしれませんが、Ruby初心者スレッドではないかもしれません。 ;-) –

0

まず、そこから始めた2つの素敵な方法があります。しかし、私はそれらの中にputsを使用しないでください。あなたはとにかくそれを必要としません。メソッドは常に評価された最後のステートメントを生成します。 something = textは仕事を終わらせます。そして、私は違いについて今は答える必要はありません。 あなたの最初の2つの返信はとても良いです。しかし、あなたはこのようなものを試してみたいかもしれません。 j = * []#=> nil 1.8で、[]は1.9で 今、それは何かを推測する?

関連する問題