gpt4 book ai didi

ruby - Ruby 方法返回 splat-list 的任何理由?

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:58 25 4
gpt4 key购买 nike

Ruby 语言源代码,lib/fileutils.rb ,方法 mkdir_p 简化后如下所示:

def mkdir_p(list, options={})
return *list if options[:noop]
# ...
return *list
end

从我对 Ruby 的了解和测试来看,这里没有意义。是否有任何边缘情况会产生影响?

相关地,如果不存在这会影响输出的边缘情况,splat 是完全无害的还是会导致任何 Ruby 解释器执行额外(不必要的)工作?

最佳答案

return lreturn *l其实是有区别的;这有助于了解要查找的内容。

一个重要的区别是它生成数组的副本物化枚举器——在所有情况下都会返回一个数组。 p>

def x(l)
return *l
end

p = ["hello"]
q = x(p)
q[0] = "world"

# p -> ['hello']
# q -> ['world']

u = x(0.upto(2))
# u -> [0, 1, 2] - Enumeration is forced

另一个区别是 splat 运算符会将 nil 强制转换为一个空数组,并将其他(非数组/枚举器)值强制转换为一个元素的数组 - 同样, 在所有情况下都返回数组。

r = x(nil)
# r -> []

s = x("one")
# s -> ['one']

因此,使用 return *l 具有微妙的含义,希望方法文档充分涵盖这些含义,否则在使用中“不足为奇”。

关于ruby - Ruby 方法返回 splat-list 的任何理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22340345/

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