Types 在F#中,两个具有不同算术性和返回类型的函数是否可以共享一个名称?
在F#中,两个具有不同算术性和返回类型的函数是否可以共享一个名称 例如,对于两个参数,Types 在F#中,两个具有不同算术性和返回类型的函数是否可以共享一个名称?,types,f#,overloading,Types,F#,Overloading,在F#中,两个具有不同算术性和返回类型的函数是否可以共享一个名称 例如,对于两个参数,f返回一个int: let f (x:int) (y:int) : int = x + y 但是对于3个参数,f返回一个bool: let f (x:bool) (y:bool) (z:bool) : bool = x & y & z 似乎返回类型应该可以通过给定的参数数推断出来,但我得到了编译错误: 值“f”的重复定义 这是F#的限制吗 让我们分析这两个特性: 不同的退货类型: 这在F
f
返回一个int
:
let f (x:int) (y:int) : int = x + y
但是对于3个参数,f
返回一个bool
:
let f (x:bool) (y:bool) (z:bool) : bool = x & y & z
似乎返回类型应该可以通过给定的参数数推断出来,但我得到了编译错误:
值“f”的重复定义
这是F#的限制吗 让我们分析这两个特性:
- 不同的退货类型:
- 不同数量的参数:
- 两者同时进行:
但是,我也不认为这是一个好主意。你可以对成员这样做,但是请注意,
f1
有一个不明确的类型,这可能是一个问题向所有参数添加显式类型这是一个限制-模块中的函数需要有不同的名称是的,我同意这不是一个好主意,我只是想知道这是否可行。
let f (x:int) (y:int) : int = x + y
let g (x:bool) (y:bool) (z:bool) : bool = x & y & z
type T = T with
static member ($) (T, x) = fun y -> f x y
static member ($) (T, x) = fun y z -> g x y z
let inline myFunc x y = (T $ x) y
let result1 = myFunc 3 5
let result2 = myFunc true false true