8

昨天有人问起 splat 运算符,我想看看源代码……那是用 C 写的还是用 Ruby 写的?它会在哪里找到?

4

2 回答 2

7

一些快速的谷歌搜索发现它是在eval.c中实现的。您可以在文件中的几个位置找到对“splat”的引用,但我对 Ruby 的内部工作原理不够熟悉,无法理解它。

于 2009-05-28T15:30:58.397 回答
2

从 Ruby 2.4 开始,splat 运算符在核心 Ruby 文档中的记录很差。不过,它是该语言的核心功能,splat 运算符的源代码可以vm_eval.crb_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
于 2017-08-02T01:57:14.297 回答