error: "struct" expression not at top level
error: "struct" expression not at top level
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
所以,我认为我的 Code/Approach 没有那么凝聚力。任何人都可以提出建议 and/or 另一个方法。
- 您正在尝试使用默认值
10
创建参数名称 max
。错误是关于 max=10
不是有效名称 (Symbol
),而 max
是。更大的问题是你试图把它放在 struct
表达式而不是构造函数 method:
struct Foo
bar::Float64
max::Int64
end
# constructor
Foo(bar, max=10) = Foo(bar, max)
因此,您还必须弄清楚如何为具有默认值的方法创建表达式。
- 你的第二个错误意味着
struct
s 必须在顶层定义。 “顶级”类似于全局范围,但在某些情况下更严格;我不知道确切的区别,但它肯定排除了本地范围(macro
、function
等)。看起来问题是 creatStruct
返回的表达式被评估为 myStruct
中的代码,但我得到的 LoadError
有不同的消息。无论如何,如果我确保事情保持为表达式,错误就会消失:
macro myStruct(name,arg)
:(@creatStruct $name $arg)
end
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
所以,我认为我的 Code/Approach 没有那么凝聚力。任何人都可以提出建议 and/or 另一个方法。
- 您正在尝试使用默认值
10
创建参数名称max
。错误是关于max=10
不是有效名称 (Symbol
),而max
是。更大的问题是你试图把它放在struct
表达式而不是构造函数 method:
struct Foo
bar::Float64
max::Int64
end
# constructor
Foo(bar, max=10) = Foo(bar, max)
因此,您还必须弄清楚如何为具有默认值的方法创建表达式。
- 你的第二个错误意味着
struct
s 必须在顶层定义。 “顶级”类似于全局范围,但在某些情况下更严格;我不知道确切的区别,但它肯定排除了本地范围(macro
、function
等)。看起来问题是creatStruct
返回的表达式被评估为myStruct
中的代码,但我得到的LoadError
有不同的消息。无论如何,如果我确保事情保持为表达式,错误就会消失:
macro myStruct(name,arg)
:(@creatStruct $name $arg)
end