gpt4 book ai didi

ruby - Splat 在哈希上

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

  • 散列上的 splat 将其转换为数组。

    [*{foo: :bar}] # => [[:foo, :bar]]

    这里是否存在某种隐藏机制(例如隐式类转换),或者它是一种内置的原始特征?

  • 除了数组,nil 和 hash 是唯一在 Ruby 1.9 下随 splat 运算符消失/改变的东西吗?

最佳答案

splat 将尝试将对象显式转换为数组。

为此,它将发送 to_a 并期望得到一个 Array

class Foo
def to_a
[1,2,3]
end
end

a, b, c = *Foo.new
a # => 1

如果对象不响应to_a,则没有效果,例如[*42] == [42]

许多内置类实现to_a。特别是:

  • (因为它们包括 Enumerable)
    • 数组
    • 哈希
    • 范围
    • IOFile
    • 枚举器
    • Enumerator::Lazy (Ruby 2.0)
    • SetSortedSet
  • (附加类(class))
    • NilClass
    • 匹配数据
    • OpenStruct
    • 结构
    • 时间
    • 矩阵向量

因此,所有这些都可以展开:

match, group, next_group = *"Hello, world".match(/(.*), (.*)/)
group # => "Hello"

关于ruby - Splat 在哈希上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303499/

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