2011-01-09 86 views

回答

6

我从来没有听说过这些。 Google上只有大约五个点击,其中一个就是这个问题,这似乎暗示这些是构成术语。就像任何虚构的术语一样,如果你想知道它是什么意思,你必须询问完成它的人。

从我能收集的很少,它似乎与基于返回类型的重载有关。

基本上,如果你有四个重载函数像这样:

foo :: string → int 
foo :: string → string 
foo :: string →() 
foo :: int → int 

而你打电话给他们这样的:

1 + foo 1 
1 + foo "one" 
foo "one" 

然后,与上下文相关的超载(即超载根据返回类型以及参数类型),将选择以下实现:

1 + foo 1  # foo :: int → int 
1 + foo "one" # foo :: string → int (because `+` takes an `int`) 
foo "one"  # foo :: string →() (because there is no return value) 

而与上下文无关的重载(即忽略返回类型),下面的实施方式将被选择:

1 + foo 1  # foo :: int → int 
1 + foo "one" # ERROR 
foo "one"  # ERROR 

ERROR案件两者有foo :: string → intfoo :: string → stringfoo :: string →()之间的模糊性,因为它们只在它们的返回类型不同,但具有相同的paremeter类型。

0

here引用:

有两种 功能/操作符的过载。

  • 背景独立的 - 重载只对参数进行到操作数 功能或类型的 操作者
  • 上下文依赖性 - 这抽象调用也取决于 结果
的类型