3, "y" => 2} puts value.class puts value.is_a?(Hash)-6ren">
gpt4 book ai didi

ruby - 为什么是_a?哈希类返回 false?

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

为什么 is_a?Hash 类返回 false

示例:

value = {"x" => 3, "y" => 2}

puts value.class
puts value.is_a?(Hash)

输出:

Hash
false

我正在使用 Ruby 1.9.2

已更新:我的类(class)的完整来源:

class LatLng
include Mongoid::Fields::Serializable

attr_reader :lat, :lng

def serialize(value)
return if value.nil?

puts value.class
puts value.is_a?(Hash)

if value.is_a?(self.class)
puts "is geopoint" + value.to_json
{'lng' => value.lng.to_f, 'lat' => value.lat.to_f}
elsif value.is_a?(Hash)
hash = value.with_indifferent_access
puts "is hash" + value.to_json
{'lng' => hash['lng'].to_f, 'lat' => hash['lat'].to_f}
end
end

def deserialize(value)
return if value.nil?

value.is_a?(self.class) ? value : LatLng.new(value['lat'], value['lng'])
end

def initialize(lat, lng)
@lat, @lng = lat.to_f, lng.to_f
end

def [](arg)
case arg
when "lat"
@lat
when "lng"
@lng
end
end

def to_a
[lng, lat]
end

def ==(other)
other.is_a?(self.class) && other.lat == lat && other.lng == lng
end
end

最佳答案

#irb
ruby-1.9.3-p0 :001 > value = {"x" => 3, "y" => 2}
=> {"x"=>3, "y"=>2}
ruby-1.9.3-p0 :002 > value.is_a?(Hash)
=> true

尝试禁用您加载的任何 gem/扩展,并尝试使用干净的 ruby​​

更新:

尝试 value.is_a?(::Hash)

PS:尝试阅读关于 Duck Typing 的内容在 ruby 中。也许你应该调用 value.respond_to?(:key) 而不是 value.is_a?(Hash)

关于ruby - 为什么是_a?哈希类返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8590252/

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