我希望得到一个类的所有属性。 当我漂亮地打印一个对象时,我拥有该对象的所有信息,所以我想有一种方法可以直接获取类的属性。
例如:
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 方法解包,因此您可以在方法列表中找到它。