如何获取 class 的所有 属性
How to get all property of a class
我希望获得 class 的所有属性。
当我漂亮地打印一个对象时,我拥有该对象的所有信息,所以我想有一种方法可以直接获取 class 的属性。
例如:
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
is a macro 将在编译中解包为 getter/setter 方法,因此您可以在方法列表中找到它。
我也是这样找到的
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]
我希望获得 class 的所有属性。 当我漂亮地打印一个对象时,我拥有该对象的所有信息,所以我想有一种方法可以直接获取 class 的属性。
例如:
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
is a macro 将在编译中解包为 getter/setter 方法,因此您可以在方法列表中找到它。
我也是这样找到的
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]