2016-03-29 15 views
0

Bu kod çalışır: permission içindeÖğeleri yakutta yinelenebilir bir şekilde sarmak için daha temiz, daha kısa, yerleşik bir yol var mı?

permission.class.ancestors.include?(Enumerable) ? permission : [permission] 

içerik olabilir ya da bir sembol ya da herhangi bir sıra (örneğin, bir dizi) ile. Tek bir öğe geçilirse, bir diziye sarılır.

Bunu zaten yapan bir yöntem var mı? (2.2.2'de ruby-built-in olabilir ya da 4.2.0 rayları tarafından eklenebilir). http://apidock.com/rails/Array/wrap/class:

>> 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] 

Burada belgeleri bulabilirsiniz: Rails (active_support/core_ext) in ActiveSupport tarafından sağlanan Array.wrap() uzantısı tarif ettiğiniz gibi

cevap

1

Evet, öyle görünüyor. çekirdek Ruby kütüphanesinde Array(...) yöntem benzer bir davranışa sahiptir, ancak iç içe geçmiş bir dizi için bir karma dönüştürür:

>> Array(list) 
=> ["a", :b, /c/] 

>> Array(map) 
=> [["a", :foo], [:b, :bar], [/c/, "baz"]] # Probably not what you want 

>> Array(:symbol_literal) 
=> [:symbol_literal] 

yukarıda verilen bağlantı belgeler Array()

karşı Array.wrap() daha kapsamlı bir açıklama içermektedir
İlgili konular