Julia中结构体参数名称来源?Makie Figure关键字参数疑问
解答:Makie的Figure为什么支持关键字参数
首先得明确:Julia里的结构体默认只有位置参数的构造函数,但开发者可以手动定义带关键字参数的构造函数,Makie的Figure就是这么实现的。
1. 普通结构体的默认行为
你给出的Foo例子是Julia结构体的默认情况:
struct Foo bar baz end foo = Foo(1, 2) # 必须按字段顺序传位置参数
这是因为Julia会自动给结构体生成一个仅接受位置参数的默认构造函数,参数顺序和结构体字段定义顺序完全一致。
2. Makie的Figure是自定义了关键字构造函数
Makie的开发者给Figure结构体额外写了带关键字参数的构造函数,目的是让用户不用记位置参数的顺序,直接用直观的关键字(比如backgroundcolor、resolution)来配置图表。
这些关键字参数并不直接对应Figure结构体的字段,而是会被构造函数内部处理,用来设置图表的各种属性(比如窗口尺寸、背景色)。
3. 怎么查看支持的关键字参数?
如果文档字符串没直接列出这些关键字,可以用Julia的methods函数查看Figure的所有构造函数签名:
methods(Figure)
执行后会看到带关键字参数的构造函数版本,从中就能找到支持的所有关键字。
自己实现关键字构造函数的例子
如果你想给自己的结构体加关键字参数,有两种简单方式:
- 用
Base.@kwdef宏自动生成:Base.@kwdef struct MyStruct width::Int = 800 height::Int = 600 color::Symbol = :white end obj = MyStruct(color=:tomato) # 用关键字参数初始化 - 手动写构造函数:
struct MyStruct width::Int height::Int color::Symbol end # 定义关键字构造函数 MyStruct(; width=800, height=600, color=:white) = MyStruct(width, height, color) obj = MyStruct(width=1000)
内容的提问来源于stack exchange,提问作者PPenton
相关产品推荐
相关产品推荐

