在Julia(<0.6)中,当创建参数化复合类型时MyType{T}
,是否有一种T
从该类型的实例中恢复的简洁方法?
以他们的文档为例:
type Point{T}
x::T
y::T
end
Run Code Online (Sandbox Code Playgroud)
我可以创建一个对象p = Point(5.0,5.0)
,T
这里将匹配,Float64
以便相应的对象是一个Point{Float64}
.有一个干净的方式来恢复Float64
吗?
我可以
typeof(p.x)
Run Code Online (Sandbox Code Playgroud)
但感觉这不是正确的事情.
在模拟分布式推理的并行应用程序中,我希望有一个"初始化步骤",其中所有"从属"从"主"接收一些初始信息然后开始他们的任务.
目前我有一个基于该sendTo
函数的工作实现(这里的代码在堆栈溢出时被发现),但我不认为它保证了worker在收到初始对象之前不会启动它的任务.
这是一个粗糙的MWE
function sendTo(p::Int; args...)
for (nm, val) in args
@spawnat(p, eval(Main, Expr(:(=), nm, val)))
end
end
a = 5
addprocs(4)
[sendTo(worker,a=a+randn()) for worker in workers()]
@everywhere begin
println(a)
end
Run Code Online (Sandbox Code Playgroud)
上面的"工作",但我如何确定@everywhere
在工作人员收到定义之前,块中的命令没有执行a
?
Rmk:对于我正在使用的上下文,我想保留两个不同的块,一个用于传播数据,另一个用于处理数据.
其他rmk:道歉,如果这是微不足道的,我对处理并行性很新(对Julia也很新)
我正在尝试使用replace
doc指定的函数
replace(string :: AbstractString,pat,r [,n :: Integer = 0])
搜索给定的模式pat,并用r替换每个匹配项.如果提供n,则最多替换n次.与搜索一样,第二个参数可以是单个字符,向量或一组字符,字符串或正则表达式.如果r是一个函数,则每次出现都被替换为r(s),其中s是匹配的子字符串.如果pat是正则表达式而r是SubstitutionString,则r中的捕获组引用将替换为相应的匹配文本.
我不明白最后一句,但找不到SubstitutionString
(SubString
虽然有,但我也无法直接找到doc).我想在r
使用所示的捕获组进行替换pat
.与Python中的以下简单示例相对应的东西:
regex.sub(r'#(.+?)#', r"captured:\1", "hello #target# bye #target2#")
Run Code Online (Sandbox Code Playgroud)
返回'hello captured:target bye captured:target2'
.