【问题标题】:What does the Ruby method .split("\x0") return?Ruby 方法 .split("\x0") 返回什么?
【发布时间】:2014-10-01 07:17:51
【问题描述】:

在 Ruby gem 的默认骨架代码中,.gemspec 文件在 Gem::Specification 类内有这一行:

spec.files = `git ls-files -z`.split("\x0")

当我在终端中运行 git ls-files -z 时,我得到了

.gitignoreGemfileLICENSE.txtREADME.mdRakefiledogeify.gemspeclib/dogeify.rblib/dogeify/version.rb

.split("\x0") 方法的输出究竟是什么?

PS:参考第一行代码,``字符是否允许终端执行代码并将结果与​​Ruby方法结合?

【问题讨论】:

    标签: ruby string methods terminal gem


    【解决方案1】:

    git(1) 帮助说:

    $ git help ls-files
    [...]
        -z
            \0 line termination on output.
    

    所以当你说git ls-files -z时,它会列出零字节的文件作为文件名之间的分隔符。当您说find ... -print0 或使用xargs -0 时,您会看到类似格式的输出。使用零字节作为分隔符的原因是它们不能出现在文件名中,但任何其他分隔符(例如空格)都可以。

    然后回到 Ruby,您需要解压缩 \x0-delimited 列表。如果您 string.split("\x0"),您将在零字节 ("\x0") 上将 string 分开并将这些部分作为数组返回;例如:

    > "where\x0is\x0pancakes\x0house?".split("\x0")
     => ["where", "is", "pancakes", "house?"] 
    

    所以git ls-files -z 为您提供文件名之间为零字节的文件列表,split("\x0") 将该字符串分解为文件名数组。

    【讨论】:

    • 感谢您的回答。如果 Ruby 文件中有代码被反引号包围:``,这是否意味着您可以在其末尾附加一个 Ruby 方法?
    • 反引号实际上是Kernel 中返回字符串的方法:ruby-doc.org/core-2.1.2/Kernel.html#method-i-60
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2012-12-05
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多