gpt4 book ai didi

macros - 生成访问器的 Julia 宏

转载 作者:行者123 更新时间:2023-12-05 04:31:09 27 4
gpt4 key购买 nike

我需要一个用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com