小编ahm*_*hm5的帖子

朱莉娅中的关键字“where”是什么意思?

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 未定义

constructor struct where-clause julia

6
推荐指数
2
解决办法
4794
查看次数

如何将字典传递给带有关键字参数的函数?

假设我有这个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 中定义了哪些参数并将其自动传递给函数的方法。

mapping dictionary function julia

6
推荐指数
1
解决办法
519
查看次数

错误:“struct”表达式不在顶层

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

所以,我认为我的代码/方法没有那么有凝聚力。任何人都可以提出建议和/或其他方法。

macros metaprogramming syntax-error julia

5
推荐指数
1
解决办法
603
查看次数

为什么宏不能理解 Dict 参数?

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)

macros dictionary expression julia

5
推荐指数
1
解决办法
172
查看次数

为什么 DNS 请求使用 UDP 而不是 TCP?

为什么 DNS 请求通常使用 UDP 而不是 TCP?

我知道我们可以使用 TCP,但为什么 UDP 是默认协议?有什么原因吗,或者只是出于设计目的?

dns networking udp protocols

5
推荐指数
2
解决办法
1563
查看次数

我可以在 julia 中定义一个像原始数据类型一样的新类型吗?

我需要知道是否有任何方法可以在 Julia 中定义一个类似于原始数据类型的新类型,例如:

struct test
 att1::MyType
end
Run Code Online (Sandbox Code Playgroud)

假设 myMyType仅从 1 到 10。所以如果我创建一个这样的实例:

test1=test(11)它应该给我一个错误。

我猜想有一种更简单的方法可以做到这一点,但我需要将 MyType 扩展为不仅仅是从 1 到 10。

primitive-types julia

2
推荐指数
1
解决办法
421
查看次数