macros - 生成访问器的 Julia 宏

标签 macros julia accessor field-accessors

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

相关文章:

python - 将 Abaqus 宏转换为 Python 脚本

ios - Xcode 7 : Set Preprocessor Macros per architecture

julia - Flux.jl 有张量对象吗?

java - 在 Java 中使用修改器和访问器设置圆的颜色和半径

c# - 自动实现的属性与自动实现的属性绑定(bind)中的公共(public)属性

c++ - 使用访问器访问静态 std::set 是明智的还是我应该直接访问它?

rust - 如何在用户空间中实现复杂的宏,如 `format_args!`?

emacs - emacs lisp 宏扩展期间的 eval

python - 在 python 中运行 Julia .jl 文件

tensorflow - 如何在 TensorFlow.jl 中实现 SELU?