2011-01-09 276 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引用:

有兩種 功能/操作符的過載。

  • 背景獨立的 - 重載只對參數進行到操作數 功能或類型的 操作者
  • 上下文依賴性 - 這抽象調用也取決於 結果
的類型