如何获取类的所有属性



我希望得到一个类的所有属性。 当我漂亮地打印一个对象时,我拥有该对象的所有信息,所以我想有一种方法可以直接获取类的属性。

例如:

class Location
property latitude : Float64
property longitude : Float64
end

如何确定Location具有纬度和经度作为属性。

谢谢

我也找到了这种方式

class Location
property latitude  : Float64
property longitude : Float64
def initialize(@latitude, @longitude)
end
# Call this on class instance
def methods
{{ pp! @type.instance_vars  }}
end
end
loc = Location.new(-13.8948894, 33.775556)
pp loc.methods #=> @type.instance_vars # => [latitude, longitude]

Crystal 没有用于检索方法的内置选项,但您可以定义它:

class Location
property latitude  : Float64
property longitude : Float64
def initialize(@latitude, @longitude)
end
# Call this on class instance
def methods
{{ @type.methods.map(&.name).select { |m| !m.includes?("=") }.map(&.stringify)  }}
end
end
loc = Location.new(-13.8948894, 33.775556)
pp loc.methods #=> ["latitude", "longitude", "initialize", "methods"]

property是一个宏,将在编译中作为 getter/setter 方法解包,因此您可以在方法列表中找到它。

相关内容

  • 没有找到相关文章

最新更新