Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays ruby优雅地将项目数组包装成一个对象_Arrays_Ruby - Fatal编程技术网

Arrays ruby优雅地将项目数组包装成一个对象

Arrays ruby优雅地将项目数组包装成一个对象,arrays,ruby,Arrays,Ruby,鉴于: 我想知道一种比这更优雅的方式来将每一项转换为物品: class Thing def initialize(object) @object = object end end items = [1,2,3] items.map{| item | Thing.new item} # => [, ] 我认为你的例子非常好。但也许你喜欢这样的东西: items.map{ |item| Thing.new item } # => [<Thing @object=

鉴于:

我想知道一种比这更优雅的方式来将每一项转换为物品:

class Thing
  def initialize(object)
    @object = object   
  end
end

items = [1,2,3]
items.map{| item | Thing.new item}
# => [, ]

我认为你的例子非常好。但也许你喜欢这样的东西:

items.map{ |item| Thing.new item }
# => [<Thing @object=1>, <Thing @object=2>, <Thing @object=3>]
items.map(&Thing.method(:new))
这样你就可以写:

# in item.rb
def to_thing
  Thing.new(self)
end

您可以使用一元前缀
运算符:

items.map(&:to_thing)
,这样您就可以这样写:

items.map{ |item| Thing.new item }
# => [<Thing @object=1>, <Thing @object=2>, <Thing @object=3>]
items.map(&Thing.method(:new))
然而,人们似乎对这项提议不太感兴趣。不过,您可以自己对其进行修补,实现起来很简单:

items.map(&Thing)

尽管我对猴子补丁持怀疑态度(主要是因为我不太熟悉,不知道什么时候可以练习),但第一个例子非常有效。谢谢你。你的建议很吸引人!