Ruby,Splat的源代码?

Dan*_*ark 8 ruby splat

有人昨天询问了splat运算符,我想看看源代码......是用C还是用Ruby编写的?会在哪里找到?

Mar*_*don 7

一些快速谷歌搜索发现它是在eval.c中实现的.你可以在文件的几个地方找到对"splat"的引用,但是我对Ruby的内部工作方式还不够熟悉,无法理解它.


ano*_*rmh 2

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

单元测试可以更rb_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
Run Code Online (Sandbox Code Playgroud)