【发布时间】:2010-10-29 14:46:03
【问题描述】:
昨天有人问起 splat 运算符,我想看看源代码……那是用 C 写的还是用 Ruby 写的?在哪里可以找到?
【问题讨论】:
昨天有人问起 splat 运算符,我想看看源代码……那是用 C 写的还是用 Ruby 写的?在哪里可以找到?
【问题讨论】:
一些快速的 Google 搜索发现它在 eval.c 中实现。您可以在文件中的几个位置找到对“splat”的引用,但我对 Ruby 的内部工作原理不够熟悉,无法理解它。
【讨论】:
a, *b = 1,2,3,4,5),它将始终创建一个数组。
从 Ruby 2.4 开始,splat 操作符在核心 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
【讨论】: