2009-05-28 93 views

回答

1

从Ruby 2.4开始,核心Ruby文档中对splat操作符的记录很少。不过,这是该语言的核心功能,并且可以在vm_eval.crb_yield_splat(VALUE values)下找到splat运算符的源代码。

unit testrb_yield_splat使得它更清晰的所发生的事情:

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 
7

一些快速的Google搜索出现了,它在eval.c中实施。你可以在文件的一些地方找到对“splat”的引用,但是我对Ruby的内部工作原理不够熟悉。

+0

感谢的是,马丁。试图理解Ruby世界。所以基本上,如果它是ruby而不是rails,则源代码可能不在Ruby中,这很有意义。 – 2009-05-28 18:27:58

+0

splat运算符是核心ruby语言的一部分,不是库函数。它可以用于定义#to_ary方法的任何对象,但是当用于将多个值收集到单个变量中时(如`a,* b = 1,2,3,4,5`),它将始终创建一个阵列。 – rampion 2009-05-28 19:05:57