2009-05-28 6 views

答えて

1

Ruby 2.4以降の主要なRubyドキュメントでは、splat演算子の記述が不適切です。これは言語の中心的な機能ですが、スプラット演算子のソースコードはvm_eval.cの下にrb_yield_splat(VALUE values)の下にあります。

rb_yield_splatためunit testは何が起こっているのか、それが明確になります。そのため

it "yields with passed array's contents" do 
    ret = nil 
    @s.rb_yield_splat([1, 2]) { |x, y| ret = x + y } 
    ret.should == 3 
end 
+0

それは素晴らしいですが、ソースがどこにあるのかはどうでしたか? –

+0

Ruby gitリポジトリの[検索しました](https://github.com/ruby/ruby/search?l=C&q=splat&type=&utf8=%E2%9C%93)。検索をCファイルに制限し、見つかるまでソースコードを読んでください。 – anothermh

+0

うわー、それは素晴らしいです。ありがとうございました。 –

7

速いGoogle検索では、eval.cに実装されています。ファイル内のいくつかの場所で "splat"への参照を見つけることができますが、私はRubyの内部的な働きについて十分理解していません。

+0

おかげで、マーティン。 Rubyの世界を理解しようとしています。だから基本的に、それがルビーでレールでなければ、ソースはおそらくRubyにはないのです。 –

+0

splat演算子は、ライブラリ機能ではなく、コアのRuby言語の一部です。 #to_aryメソッドを定義しているオブジェクトであれば使用できますが、複数の値を(a、* b = 1,2,3,4,5'のように)1つの変数に集めて使用すると、常にアレイ。 – rampion

+0

@Rampion、それに感謝します。だから私の本当の疑問は次のようなものだと思う:「必要な」ライブラリを必要としない "ライブラリの機能"(Rubyのソースコード)があるか? –

関連する問題