Inconsistent MethodError: only exists outside call to plots
Inconsistent MethodError: only exists outside call to plots
这是工作正常的代码:
function band_limited_interpolation()
h=1
xmax=10
x = -xmax:h:xmax
xx = -xmax-h/20:h/10:xmax+h/20
v = x .== 0
function p(v)
p = zeros(size(xx))
for i in 1:length(x)
p += v[i] * sin.(π*(xx.-x[i])/h) ./ (π*(xx.-x[i])/h)
end
p
end
plot1 = plot(x, v, seriestype=:scatter, legend=false)
plot!(xx, p(v), xlims=(-10,10), ylims=(-0.5,1.1))
end
band_limited_interpolation()
但是,如果我尝试再次调用 p(v)
,则会出现方法错误。
这里是相同的函数,只是最后一行发生了变化:
function band_limited_interpolation()
h=1
xmax=10
x = -xmax:h:xmax
xx = -xmax-h/20:h/10:xmax+h/20
v = x .== 0
function p(v)
p = zeros(size(xx))
for i in 1:length(x)
p += v[i] * sin.(π*(xx.-x[i])/h) ./ (π*(xx.-x[i])/h)
end
p
end
plot1 = plot(x, v, seriestype=:scatter, legend=false)
plot!(xx, p(v), xlims=(-10,10), ylims=(-0.5,1.1))
p(v)
end
band_limited_interpolation()
MethodError: objects of type Vector{Float64} are not callable
Use square brackets [] for indexing an Array.
这是为什么?我可以在 plot!
调用中调用它吗?
您使用名称 p
来指代两个不同的事物:
- 一个函数
- 一个
Vector{Float64}
,特别是p = zeros(size(xx))
前者可以用p(v)
调用,后者不能,如果你试图这样做,将会产生报告的错误。不管怎样,该错误表明在您调用 p(v)
并收到该错误的范围内,p
被理解为 (2)。如果您曾经将 p = zeros(size(xx))
粘贴到 REPL 中,或者可能出于其他原因,也可能会发生这种情况。虽然您可以通过注意范围来避免这种情况,但最简单的解决方案就是不要以这种方式重复使用变量名称 p
。
这是工作正常的代码:
function band_limited_interpolation()
h=1
xmax=10
x = -xmax:h:xmax
xx = -xmax-h/20:h/10:xmax+h/20
v = x .== 0
function p(v)
p = zeros(size(xx))
for i in 1:length(x)
p += v[i] * sin.(π*(xx.-x[i])/h) ./ (π*(xx.-x[i])/h)
end
p
end
plot1 = plot(x, v, seriestype=:scatter, legend=false)
plot!(xx, p(v), xlims=(-10,10), ylims=(-0.5,1.1))
end
band_limited_interpolation()
但是,如果我尝试再次调用 p(v)
,则会出现方法错误。
这里是相同的函数,只是最后一行发生了变化:
function band_limited_interpolation()
h=1
xmax=10
x = -xmax:h:xmax
xx = -xmax-h/20:h/10:xmax+h/20
v = x .== 0
function p(v)
p = zeros(size(xx))
for i in 1:length(x)
p += v[i] * sin.(π*(xx.-x[i])/h) ./ (π*(xx.-x[i])/h)
end
p
end
plot1 = plot(x, v, seriestype=:scatter, legend=false)
plot!(xx, p(v), xlims=(-10,10), ylims=(-0.5,1.1))
p(v)
end
band_limited_interpolation()
MethodError: objects of type Vector{Float64} are not callable Use square brackets [] for indexing an Array.
这是为什么?我可以在 plot!
调用中调用它吗?
您使用名称 p
来指代两个不同的事物:
- 一个函数
- 一个
Vector{Float64}
,特别是p = zeros(size(xx))
前者可以用p(v)
调用,后者不能,如果你试图这样做,将会产生报告的错误。不管怎样,该错误表明在您调用 p(v)
并收到该错误的范围内,p
被理解为 (2)。如果您曾经将 p = zeros(size(xx))
粘贴到 REPL 中,或者可能出于其他原因,也可能会发生这种情况。虽然您可以通过注意范围来避免这种情况,但最简单的解决方案就是不要以这种方式重复使用变量名称 p
。