Ruby,Splat 的源代码?

发布于 2024-07-22 10:09:29 字数 69 浏览 9 评论 0原文

昨天有人问有关 splat 运算符的问题,我想看看源代码……那是用 C 编写的还是用 Ruby 编写的? 哪里可以找到呢?

Someone asked about the splat operator yesterday, and I wanted to see the source code... would that be written in C or in Ruby? Where would it be found?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悟红尘 2024-07-29 10:09:29

Some quick Google searching turned up that it's implemented in eval.c. You can find references to "splat" in a few places in the file, but I'm not familiar enough with the inner workings of Ruby to make any sense of it.

习ぎ惯性依靠 2024-07-29 10:09:29

从 Ruby 2.4 开始,splat 运算符在 Ruby 核心文档中的记录很少。 不过,这是该语言的核心功能,splat 运算符的源代码可以在 rb_yield_splat(VALUE 值)

单元测试 for 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

The splat operator is poorly documented in the core Ruby documentation as of Ruby 2.4. It's a core feature of the language, though, and the source code for the splat operator can be found in vm_eval.c under rb_yield_splat(VALUE values).

The unit test for rb_yield_splat makes it clearer what is happening:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文