此代码有效:
permission.class.ancestors.include?(Enumerable) ? permission : [permission]
permission
中的内容可以是符号或任何序列(例如,数组)。如果传递单个元素,则将其包装在数组中。
有没有一种方法可以做到这一点? (可以是2.2.2中的ruby内置或者是rails 4.2.0添加的。)
答案 0 :(得分:1)
是的,您似乎在Rails(Array.wrap()
)中描述ActiveSupport提供的active_support/core_ext
扩展名:
>> list = ['a', :b, /c/]
=> ["a", :b, /c/]
>> Array.wrap(list)
=> ["a", :b, /c/]
>> map = {"a" => :foo, b: :bar, /c/ => 'baz'}
=> {"a"=>:foo, :b=>:bar, /c/=>"baz"}
>> Array.wrap(map)
=> [{"a"=>:foo, :b=>:bar, /c/=>"baz"}]
>> Array.wrap(:symbol_literal)
=> [:symbol_literal]
您可以在此处找到文档:http://apidock.com/rails/Array/wrap/class。
核心Ruby库中的Array(...)
方法具有类似的行为,但会将哈希转换为嵌套数组:
>> Array(list)
=> ["a", :b, /c/]
>> Array(map)
=> [["a", :foo], [:b, :bar], [/c/, "baz"]] # Probably not what you want
>> Array(:symbol_literal)
=> [:symbol_literal]
上面提供的链接中的文档包含对Array.wrap()
vs Array()