Ruby,Splat 的源代码?
Posted
技术标签:
【中文标题】Ruby,Splat 的源代码?【英文标题】:Ruby, Source Code of Splat? 【发布时间】:2010-10-29 14:46:03 【问题描述】:昨天有人问起 splat 运算符,我想看看源代码……那是用 C 写的还是用 Ruby 写的?在哪里可以找到?
【问题讨论】:
【参考方案1】:一些快速的 Google 搜索发现它在 eval.c 中实现。您可以在文件中的几个位置找到对“splat”的引用,但我对 Ruby 的内部工作原理不够熟悉,无法理解它。
【讨论】:
谢谢你,马丁。只是试图理解 Ruby 世界。所以基本上,如果它是 ruby 而不是 rails,那么源代码可能不在 Ruby 中,这是有道理的。 splat 运算符是核心 ruby 语言的一部分,而不是库功能。它可以用于定义了#to_ary 方法的任何对象,但是当用于将多个值收集到单个变量中时(如a, *b = 1,2,3,4,5
),它将始终创建一个数组。
@Rampion,谢谢。所以我想我真正的问题是:是否有任何不需要“要求”的“库功能”(其源代码在 Ruby 中)?【参考方案2】:
从 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
【讨论】:
很好,但你怎么知道源在哪里? 我在 Ruby git 存储库中 searched for it。将搜索限制为 C 文件,然后阅读源代码,直到找到为止。 哇,太好了。谢谢。以上是关于Ruby,Splat 的源代码?的主要内容,如果未能解决你的问题,请参考以下文章