2
以下のコードでは、関数f
とg
が異なる値を返しています。コードを読むことから、それらが同じように動作することが期待されます。私はそれがv -> innerprodfn(m, v)
の閉鎖と関係があると思います。 f
とg
が同じ値を返す場合、どのようにして目的の動作を得るのですか?mapslicesでの関数クロージャ
type Mat{T<:Number}
data::Matrix{T}
end
innerprodfn{T}(m::Mat{T}, v::Array{T}) = i -> (m.data*v)[i]
innerprodfn{T}(m::Mat{T}, vv::Matrix{T}) = mapslices(v->innerprodfn(m, v), vv, 1)
m = Mat(collect(reshape(0:5, 2, 3)))
v = collect(reshape(0:11, 3, 4))
f = innerprodfn(m, v[:,1])
g = innerprodfn(m, v)[1]
m.data * v
# 10 28 46 64
# 13 40 67 94
[f(1) g(1); f(2) g(2)]
# 10 64
# 13 94