Julia 语法错误@kwdef,默认值为字符串

问题描述 投票:0回答:1

此代码会产生语法错误。我无法在 @kwdef 结构中使用默认值?

@kwdef struct MyStruct
    indir::String = "./",
    outdir::String = "./result",
    threshold::Int = 2
end


ERROR: syntax: invalid assignment location ""./result"" around REPL[16]:1
macros julia
1个回答
0
投票

@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
使用与结构定义相同的语法,因此它不应该有逗号。

© www.soinside.com 2019 - 2024. All rights reserved.