使用基于枚举名称的宏创建方法
Creating methods with a macro based on the names of an enum
具有具有以下枚举的结构:
struct Payment
enum Status
Open
Paid
Failed
def to_s
super.downcase
end
end
getter status : String
end
如何访问宏中的枚举名称以创建方法,如 open?
、paid?
和 failed?
?
解决方案
根据@Jonne Haß 的提议,这就是我想要实现的目标:
{% for value in Status.constants %}
{% downcased = value.stringify.downcase %}
def {{ downcased.id }}?
{{ downcased }} == status
end
{% end %}
struct Payment
enum Status
Open
Paid
Failed
end
getter status : Status = Status::Open
{% begin %}
delegate({{Status.constants.map {|value| value.stringify.downcase + "?" }.join(", ").id}}, to: status)
{% end %}
end
具有具有以下枚举的结构:
struct Payment
enum Status
Open
Paid
Failed
def to_s
super.downcase
end
end
getter status : String
end
如何访问宏中的枚举名称以创建方法,如 open?
、paid?
和 failed?
?
解决方案
根据@Jonne Haß 的提议,这就是我想要实现的目标:
{% for value in Status.constants %}
{% downcased = value.stringify.downcase %}
def {{ downcased.id }}?
{{ downcased }} == status
end
{% end %}
struct Payment
enum Status
Open
Paid
Failed
end
getter status : Status = Status::Open
{% begin %}
delegate({{Status.constants.map {|value| value.stringify.downcase + "?" }.join(", ").id}}, to: status)
{% end %}
end