【发布时间】:2018-04-18 19:03:45
【问题描述】:
我在输入函数时遇到问题,我已经设法编写了解释问题的最少代码:
immutable Inner{B<:Real, C<:Real}
a::B
c::C
end
immutable Outer{T}
a::T
end
function g(a::Outer{Inner})
println("Naaa")
end
inner = Inner(1, 1)
outer = Outer(inner)
g(outer)
会导致方法错误
MethodError: no method matching g(::Outer{Inner{Int64,Int64}})
所以基本上,我不想说 Inner 的类型是什么,我只想让函数确保它是 Outer{Inner} 而不是 Outer{Float64} 或其他东西。
任何帮助将不胜感激
【问题讨论】:
-
不确定,但我认为
g应该定义为function g(a::Outer{<:Inner})(带有<:),因为Inner{Int64,Int64}不是Inner{Real, Real}的子类型(请参阅位于Parametric Composite Type) -
谢谢!是的,这行得通,如果您遇到堆栈溢出点,只需写一个答案,我会接受!
标签: function inheritance arguments julia