这是我正在研究的一段代码,testfunc(nm)这行的作用不是很懂
我将其内容print出来后,如图所示
显然,此处的井号加数字代表一个函数
新手对julia不是很熟悉,
请问这是指针(指向函数)的表示吗?
for (datafile, taskvec) in tasks
@info " Loading $datafile ..."
method = models[datafile]
println("\n\n method ",method)
println("\n\n interface ",HopTB.Interface)
println("\n\n interface_field: ",getfield(HopTB.Interface, Symbol(:createmodel, method)))
nm = getfield(HopTB.Interface, Symbol(:createmodel, method))("test/data/" * datafile)#
# println(nm)
for (sourcefilename, testfunc) in taskvec
@info " Running test in $sourcefilename ..."
println("testfunc & nm ", testfunc ," &&&& ", nm)
testfunc(nm)
end
GC.gc()
end
1 个赞
Jun
2
这里的 testfunc
是一个 匿名函数,因为没有名字,所以在打印的时候,用的是 #数字
这种模式。
比如你可以在 REPL 里随便创建一个类似的函数:
julia> () -> nothing
#1 (generic function with 1 method)
julia> "testfunc $ans"
"testfunc #1"
姑且可以这么理解(?)
2 个赞
严格来说,这个符号是这个匿名函数类型的一部分。
类型和函数名在当前上下文(world)中都保持唯一。
这也是为什么函数的编号每次增长2.(注意这是实现细节,之后不做保证)
我感觉更像个顺序号,和指针还是有点区别的。
julia> () -> 1
#23 (generic function with 1 method)
julia> () -> 1
#25 (generic function with 1 method)
julia> typeof( () -> 1 )
var"#27#28"
julia> typeof( () -> 1 )
var"#29#30"
julia> fn = () -> 1
#31 (generic function with 1 method)
julia> typeof(fn)
var"#31#32"
julia> typeof(fn).name.mt.name
Symbol("#31")
为什么不显示原始的匿名函数定义,是因为目前尚未实现从 AST 中提取出源代码的函数。
参考:
1 个赞