设置:在朱莉娅考虑一个参数类型相互作用
type MyType1{T1}
x::T1
end
我使用多个调度和类型参数定义在这种类型的单功能的两种方法:
f1(m::MyType1, i::Int64) = m.x + i #Method 1
f1{T1}(m::MyType1, i::T1) = m.x + i + 1 #Method 2
方法1对应于第二输入是Int64
的情况。方法2对应于第二输入是参数的情况。我使用m=MyType1{Int64}(1)
创建了MyType1
的实例,并注意m.x
现在返回1
。
问题1:我看到以下行为:
In : f1(m, 1.0)
Out : 3.0
好了,所以我没有提供在函数调用的任何信息关于T1
。看起来Julia推断它应该执行方法2,理由是第二个输入不是和Int64
。这是事实如何在引擎盖下工作吗?
问题2:比方说,我想调用第二种方法,但第二个输入为Int64
。显然f1(m, 1)
将不起作用,因为它会调用第一种方法。我尝试这样做:
In : f1{Int64}(m, 1)
但朱莉娅抛出这个错误:
ERROR: type: instantiate_type: expected TypeConstructor, got Function
是否有可能获得与指定为Int64
第二输入运行第二个方法,还是我傻?
你是正确的,我想实现你的方法2b。我是一个Matlab转换器,所以仍然在学习类型方面的知识。没有'Int64'的具体原因。如果没有性能问题,我会很乐意切换到“Int”。同样的规则是否适用于'Float'(即使用'Float'而不是'Float64')? ps谢谢你的答案+ 1 + Tick。非常清楚,这正是我所追求的。 – 2014-10-30 12:21:44
不,你必须指定Float64或Float32。原因在于决定使用的类型很少基于机器类型,但需要精确性。 – 2014-10-30 13:08:38