Programming languages 不同编程语言中的重载
有人能解释一下(举例)上下文无关重载和上下文相关重载之间的区别吗?我从来没有听说过这些。谷歌上只有五个点击率,其中一个就是这个问题,我觉得这似乎是虚构的术语。就像任何虚构的术语一样,如果你想知道它的意思,你必须问虚构它的人 据我所知,这似乎与基于返回类型的重载有关 基本上,如果有如下四个重载函数:Programming languages 不同编程语言中的重载,programming-languages,overloading,Programming Languages,Overloading,有人能解释一下(举例)上下文无关重载和上下文相关重载之间的区别吗?我从来没有听说过这些。谷歌上只有五个点击率,其中一个就是这个问题,我觉得这似乎是虚构的术语。就像任何虚构的术语一样,如果你想知道它的意思,你必须问虚构它的人 据我所知,这似乎与基于返回类型的重载有关 基本上,如果有如下四个重载函数: foo :: string → int foo :: string → string foo :: string → () foo :: int → int 你这样称呼他们: 1 + foo 1 1
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
而对于上下文无关重载(即忽略返回类型),将选择以下实现:
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
在错误
两种情况下,foo::string之间都存在歧义→ int
,foo::string→ string
和foo::string→ ()
,因为它们的返回类型不同,但具有相同的参数类型。引用自:
有两种类型的重载
功能/操作员
- 上下文无关-仅对要加载的参数执行重载 函数的函数或操作数类型 接线员
- 上下文相关-调用哪个抽象也取决于它 结果的类型