You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia结构体构造函数中new是否支持关键字参数?

问题解答

关于new()是否支持关键字参数

是的,Julia中的new()构造函数确实不支持关键字参数,这是语法层面的限制,所以你直接使用new(bar = "hello", foo = 2)会触发报错。

针对多字段结构体的解决方案

对于有20个字段的结构体,要确保字段赋值对应正确,可以用以下两种常用方法:

方法1:使用Base.@kwdef宏自动生成关键字构造函数

这个宏可以帮你自动生成支持关键字参数的构造函数,无需手动编写大量代码,示例如下:

using Base: @kwdef

@kwdef struct MyStruct
    foo::Number
    bar::String
    # 这里可以继续添加你的20个字段
end

# 直接用关键字参数创建实例
obj = MyStruct(foo=2, bar="hello")

如果需要在构造时添加自定义逻辑(比如参数校验),也可以在结构体内部定义构造函数,@kwdef会自动兼容:

@kwdef struct MyStruct
    foo::Number
    bar::String
    
    function MyStruct(foo::Number, bar::String)
        # 自定义逻辑:比如检查foo是否为正数
        foo > 0 || error("foo必须大于0")
        new(foo, bar)
    end
end

# 依然支持关键字调用
obj = MyStruct(foo=2, bar="hello")

方法2:手动编写外层关键字构造函数

如果不想依赖宏,可以手动写一个带关键字参数的外层构造函数,将参数按顺序传递给new():

struct MyStruct
    foo::Number
    bar::String
    # 其他18个字段...
    
    # 内部构造函数,按顺序接收参数
    function MyStruct(foo::Number, bar::String)
        new(foo, bar)
    end
end

# 外层关键字构造函数,用分号标记关键字参数
MyStruct(; foo::Number, bar::String) = MyStruct(foo, bar)

# 使用关键字参数创建实例
obj = MyStruct(foo=2, bar="hello")

内容的提问来源于stack exchange,提问作者CutePoison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:39:58