Methods 朱莉娅用了什么方法?
我已经定义了以下变量Methods 朱莉娅用了什么方法?,methods,julia,multiple-dispatch,Methods,Julia,Multiple Dispatch,我已经定义了以下变量 julia> X = (1:10) * ones(1,10) 它定义了一个矩阵,每行等于相同的数字,列中的数字从1增加到10乘以1。我想知道函数*使用了哪种方法。我怎么能问朱莉娅这个问题呢?@你要找的是哪个: @which (1:10) * ones(1, 10) # *(A::AbstractArray{T,1}, B::AbstractArray{T,2}) at linalg/matmul.jl:89 它还将超链接到Julia的GitHub中定义的相应方法。
julia> X = (1:10) * ones(1,10)
它定义了一个矩阵,每行等于相同的数字,列中的数字从1增加到10乘以1。我想知道函数
*
使用了哪种方法。我怎么能问朱莉娅这个问题呢?@你要找的是哪个
:
@which (1:10) * ones(1, 10)
# *(A::AbstractArray{T,1}, B::AbstractArray{T,2}) at linalg/matmul.jl:89
它还将超链接到Julia的GitHub中定义的相应方法。这就是我知道的@Daniel,我只想Julia告诉我,我使用的方法定义为
*(UnitRange{Int64},Array{Float64,2})
我不太擅长解释输出,但@code\u warntype(1:10)*(1,10)
可能会告诉您需要知道的内容。就我所知(我强调这不是我所知道的),最终*
似乎在调用Base.LinAlg.generic\u matmul代码>在两个输入数组{Float64,2}
上。希望有一个更有知识的人能插手进来。有没有一种方法可以迭代地深入挖掘?也就是说,答案中引用的行再次调用*
,但在两个抽象矩阵上。有没有办法让@which
也告诉我们下一步调用了哪个方法?(大概在这种情况下,这是两个矩阵{Float64}
?)的*
。@colin不,我知道,但我确信有一种元编程方法可以做到这一点。@ColinTBowers如果你得到了那行代码,你可以通过检查下一个-*
,它(*,(矩阵{Float64},矩阵{Float64}))
手动。这是多重分派的缺点吗p@GnimucK. “哪个(*,(矩阵{Float64},矩阵{Float64}))
”->是的,就是这样。正如amrods所建议的,这里可能有一个简洁的小函数,可以用来迭代整个链。感谢(你们两位)的回复。