此代码会产生语法错误。我无法在 @kwdef 结构中使用默认值?
@kwdef struct MyStruct
indir::String = "./",
outdir::String = "./result",
threshold::Int = 2
end
ERROR: syntax: invalid assignment location ""./result"" around REPL[16]:1
@kwdef
是julia中的一个宏,它定义一个结构体,并自动创建一个关联的构造函数。
通常,要创建结构体和构造函数,可以这样写:
struct Foo
paramWithoutDefaultVal::String
paramWithDefaultVal::String
end
Foo(paramWithoutDefaultVal; paramWithDefaultVal="Default Text") = Foo(paramWithoutDefaultVal, paramWithDefaultVal)
julia> Foo("Specified Text")
Foo("Specified Text", "Default Text")
julia> Foo("Specified Text", "Also Specified Text")
Foo("Specified Text", "Also Specified Text")
但是宏
@kwdef
通过稍微简化来增加可读性。
可以定义相同的结构体和构造函数,使用
@kwdef
和:
@kwdef struct Bar
paramWithoutDefaultVal::String
paramWithDefaultVal::String = "Default Text"
end
julia> Bar("Specified Text")
Bar("Specified Text", "Default Text")
julia> Bar("Specified Text", "Also Specified Text")
Bar("Specified Text", "Also Specified Text")
注意:在这两个示例中,参数之间没有逗号。由于包含逗号,问题中提供的代码被破坏。
@kwdef
使用与结构定义相同的语法,因此它不应该有逗号。