以不同的编程语言重载

时间:2011-01-09 13:34:44

标签: programming-languages overloading

有人可以解释(例子)上下文无关和上下文相关的重载之间的区别吗?

2 个答案:

答案 0 :(得分:7)

我从未听说过这些。谷歌只有大约五个点击,其中一个就是这个问题,这似乎告诉我这些都是虚构的术语。和任何一个成熟的术语一样,如果你想知道它意味着什么,你必须问问那个人。

从我可以收集到的一点点来看,它似乎与基于返回类型的重载有关。

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

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 → ()之间存在歧义,因为它们的返回类型不同但具有相同的参数类型

答案 1 :(得分:1)

引自here

  

有两种重载   功能/操作符。

     
      
  • context-independent - 仅对参数进行重载   函数或操作数的类型   操作
  •   
  • 依赖于上下文 - 调用的抽象也取决于   结果的类型
  •