gpt4 book ai didi

macros - 错误 : "struct" expression not at top level

转载 作者:行者123 更新时间:2023-12-04 12:27:22 27 4
gpt4 key购买 nike

function check(str,arg;type=DataType,max=nothing,min=nothing,description="")
@argcheck typeof(arg)==type
@argcheck arg>min
@argcheck arg<max
@argcheck typeof(description)==String
return arg
end


function constr(name,arg,field)
return :(function $name($arg,$field)
new(check($name,$arg,$field))
end)
end

macro creatStruct(name,arg)
code = Base.remove_linenums!(quote
struct $name
end
end)
print(arg)
append!(code.args[1].args[3].args,[constr(name,arg.args[1].args[1],arg.args[1].args[2])])
code
end

macro myStruct(name,arg)
@creatStruct name arg
end





@myStruct test12 (
(arg1,(max=10))
)
在我上面的代码中,我试图构建一个 macro创建一个 struct ,并且在结构中,您可以定义带有边界(最大值、最小值)和描述等的参数。
我收到此错误:
语法: "#141#max = 10" is not a valid function argument name每次我试图解决它时,我都会收到另一个错误,例如: LoadError: syntax: "struct" expression not at top level所以,我认为我的代码/方法不是那么有凝聚力。任何人都可以提出建议和/或其他方法。

最佳答案

  • 您正在尝试创建参数名称 max默认值为 10 .错误大约是 max=10不是有效名称( Symbol ),而 max是。更大的问题是您试图将其放入 struct表达式而不是构造函数方法:
  • struct Foo
    bar::Float64
    max::Int64
    end

    # constructor
    Foo(bar, max=10) = Foo(bar, max)
    因此,您还必须弄清楚如何为具有默认值的方法创建表达式。
  • 你的第二个错误意味着 struct s 必须在顶层定义。 “顶级”类似于全局范围,但在某些情况下更严格;我不知道确切的区别,但它绝对不包括本地范围( macrofunction 等)。看起来问题是 creatStruct 返回的表达式被评估为 myStruct 中的代码,但 LoadError我收到了不同的信息。无论如何,如果我确保事情保持为表达式,错误就会消失:
  • macro myStruct(name,arg)
    :(@creatStruct $name $arg)
    end

    关于macros - 错误 : "struct" expression not at top level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69622514/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com