映射不适用于短样式 (.map(&:id))
Mapping does not work in short style (.map(&:id))
我尝试执行这个非常简单的 RUBY 映射语句:
result_apartments = [{:id=>"593363170", :title=>"Country House", :price=>{:cents=>30000000, :currency=>"EUR", :human=>"€300,000.00"}, :sqm=>130, :numberOfBedrooms=>30, :numberOfBathrooms=>1}, {:id=>"906270510", :title=>"City Flat", :price=>{:cents=>80000000, :currency=>"USD", :human=>"0,000.00"}, :sqm=>60, :numberOfBedrooms=>5, :numberOfBathrooms=>23}]
puts result_apartments.map(&:id)
它以某种方式抛出错误:map': undefined method id' for #<Hash:0x0055d52
这是什么问题?数组演示有什么问题?我应该如何更改它以便我可以将其映射到这个快捷版本中:map(&:id)
不知何故 (map{|a| a[:id]}) 有效!
短方法正在尝试对每个散列调用方法 id
。那不是哈希方法。如果你这样做...
result_apartments.first.id
您会发现 id
不是一个有效的方法。
您可以使用 OpenStruct
数组来代替散列
require 'ostruct'
structured_result_apartments = result_paraments.map { |hash| OpenStruct.new hash }
那你可以做
structured_result_apartments.map(&:id)
我尝试执行这个非常简单的 RUBY 映射语句:
result_apartments = [{:id=>"593363170", :title=>"Country House", :price=>{:cents=>30000000, :currency=>"EUR", :human=>"€300,000.00"}, :sqm=>130, :numberOfBedrooms=>30, :numberOfBathrooms=>1}, {:id=>"906270510", :title=>"City Flat", :price=>{:cents=>80000000, :currency=>"USD", :human=>"0,000.00"}, :sqm=>60, :numberOfBedrooms=>5, :numberOfBathrooms=>23}]
puts result_apartments.map(&:id)
它以某种方式抛出错误:map': undefined method id' for #<Hash:0x0055d52
这是什么问题?数组演示有什么问题?我应该如何更改它以便我可以将其映射到这个快捷版本中:map(&:id)
不知何故 (map{|a| a[:id]}) 有效!
短方法正在尝试对每个散列调用方法 id
。那不是哈希方法。如果你这样做...
result_apartments.first.id
您会发现 id
不是一个有效的方法。
您可以使用 OpenStruct
数组来代替散列require 'ostruct'
structured_result_apartments = result_paraments.map { |hash| OpenStruct.new hash }
那你可以做
structured_result_apartments.map(&:id)