我希望得到一个类的所有属性。当我漂亮地打印一个对象时,我拥有了这个对象的所有信息,所以我想有一种方法可以直接获得一个类的属性。
比如说.类的属性,我想有一种方法可以直接获得类的属性。
class Location
property latitude : Float64
property longitude : Float64
end
如何确定 Location
有经纬度作为属性。
谢谢你
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
是一个宏 在编译时将被解包为gettersetter方法,结果你可以在方法列表中找到它。
我还发现这样的方法
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]