【问题标题】:Ruby, Source Code of Splat?Ruby,Splat 的源代码?
【发布时间】:2010-10-29 14:46:03
【问题描述】:

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

【问题讨论】:

    标签: ruby splat


    【解决方案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_splatunit 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 文件,然后阅读源代码,直到找到为止。
    • 哇,太好了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 2013-07-04
    • 2017-01-09
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多