struct A{T<:myType}
arg::T
arg1
function A{T}(arg,arg1) where {T}
return new{T}(arg,arg1)
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么我应该在内部构造函数旁边添加where {T} 。没有它我得到:T 未定义
假设我有这个Dict:
d=Dict("arg1"=>10,"arg2"=>20)
Run Code Online (Sandbox Code Playgroud)
和这样的函数:
function foo(;arg1,arg2,arg3,arg4,arg5)
#Do something
end
Run Code Online (Sandbox Code Playgroud)
如何调用函数并将Dictd 中的参数作为函数的参数传递?我知道我可以这样做:
foo(arg1=d["arg1"],arg2=d["arg2"])
Run Code Online (Sandbox Code Playgroud)
但有什么办法可以自动化这个过程吗?我的意思是一种找出 Dict 中定义了哪些参数并将其自动传递给函数的方法。
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))
)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我试图构建一个macro创建 a 的对象struct,并且在结构中,您可以定义带有边界(最大、最小)和描述等的参数。我收到此错误:语法:"#141#max = 10" is not a valid function argument name
每次我尝试解决它时,我都会收到另一个错误,例如:
LoadError: syntax: "struct" expression not at top level
所以,我认为我的代码/方法没有那么有凝聚力。任何人都可以提出建议和/或其他方法。
macro test1(name,arg)
println(arg.args[2])
typeof(arg.args[2])
end
@test1 test1 (
(arg1, (:max=>10))
)
Run Code Online (Sandbox Code Playgroud)
我有上面的宏,我试图传递一个 Dict 参数作为第二个参数。但问题是我无法访问它。该宏始终将第二个参数解释为表达式,当我尝试访问它时arg.args[2].args,它显示:
Vector{Any} (alias for Array{Any, 1})
Run Code Online (Sandbox Code Playgroud)
所以我不知道如何按原样传递字典。
我只想得到第二个参数,例如:
Dict{Symbol, Int64} with 1 entry:
:max => 10
Run Code Online (Sandbox Code Playgroud) 为什么 DNS 请求通常使用 UDP 而不是 TCP?
我知道我们可以使用 TCP,但为什么 UDP 是默认协议?有什么原因吗,或者只是出于设计目的?
我需要知道是否有任何方法可以在 Julia 中定义一个类似于原始数据类型的新类型,例如:
struct test
att1::MyType
end
Run Code Online (Sandbox Code Playgroud)
假设 myMyType仅从 1 到 10。所以如果我创建一个这样的实例:
test1=test(11)它应该给我一个错误。
我猜想有一种更简单的方法可以做到这一点,但我需要将 MyType 扩展为不仅仅是从 1 到 10。
julia ×5
dictionary ×2
macros ×2
constructor ×1
dns ×1
expression ×1
function ×1
mapping ×1
networking ×1
protocols ×1
struct ×1
syntax-error ×1
udp ×1
where-clause ×1