gpt4 book ai didi

ruby - 解释这个 Ruby 数组语法

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:49 24 4
gpt4 key购买 nike

bin/jekyll 的第一行 Jekyll gem 使用以下语法:

$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])

我似乎无法弄清楚 splat 的目的是什么。在 IRB 中使用和不使用 splat 运行该行会产生相同的输出 "./../lib".

https://github.com/mojombo/jekyll/blob/master/bin/jekyll

最佳答案

至少在 Ruby 1.9.3 中,join 方法的两种用法似乎是等价的。 Under the hood ,数组的元素以递归方式加入路径,并针对无限递归提供特殊保护。

因此,这工作正常:

File.join 'a', ['b', ['c']]

有人可能会争辩说 splat 运算符的目的是消除递归。问题在于:

File.join 'a', *['b', ['c']]

等同于:

File.join 'a', 'b', ['c']

为了消除递归,您必须展平数组然后然后展开它:

File.join 'a', *['b', ['c']].flatten

可以说,在参数列表的上下文中,splat 运算符“移除”了数组的括号。结果是:

# File.join receives 3 strings as parameters
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')

与此相反:

# File.join receives 2 parameters, one string and one array of strings
$:.unshift File.join(File.dirname(__FILE__), ['..', 'lib'])

More information about the splat operator .

关于ruby - 解释这个 Ruby 数组语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9854502/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com