我需要一个用 Julia 编程语言生成访问器函数的宏。使用这样的结构:
struct Account
account_number::String
balance::Float64
end
我希望它生成这段代码:
account_number(acc::Account) = acc.account_number
balance(acc::Account) = acc.balance
我想这样使用它:
@generate_accessors Account
我在网上搜索了一下,找到了 Accessors.jl 包,但它似乎与我的问题无关。有一个 Julia 社区,所以我希望某个地方存在这样的宏。不幸的是,我自己没有足够的 Julia 经验来实现这样的宏,我什至不知道是否可以制作这样的宏。感谢您向正确的方向插入的任何帮助。
最佳答案
我不知道哪个库有这样的宏,但创建一个基本的宏并不难:
# accessor(:foo, FooBar) -> quote foo(x::FooBar) = x.foo end
accessor(field, type) = :($(esc(field))(x::$type) = x.$field)
macro generate_accessors(type)
definitions = (accessor(s, type) for s in fieldnames(eval(type)))
Expr(:block, definitions...)
end
julia> struct FooBar
foo
bar
end
julia> @generate_accessors FooBar
bar (generic function with 1 method)
julia> foo(FooBar(1,2))
1
julia> bar(FooBar(1,2))
2
关于macros - 生成访问器的 Julia 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71885525/