在没有明确声明的情况下,还有哪些其他语言支持Go的接口风格?

Kar*_*sen 5 c# java type-inference d interface

我是一个经验丰富的爱好程序员,我对C++,D,Java,C#和其他人非常熟悉.

除了Go之外,几乎所有语言都要求我明确声明我正在实现一个接口.这是边缘荒谬的,因为我们今天拥有像Haskell这样的语言的编译器,它几乎可以用很少的提示进行全程序类型的推断.

我正在寻找的是一种编程语言:

interface ITest {
    void Test();
}

class Test {
    void Test() { }
}

void main() {
    ITest x;
    x = new Test;
}
Run Code Online (Sandbox Code Playgroud)

哪些语言会看到这个,并自动标记Test为实现ITest

ETA:我不是在寻找鸭子打字.我正在寻找具有推断的严格类型语言.

yaz*_*yaz 12

D wrap在其标准库Phobos中有一些东西可以做你正在寻找的东西.这是从函数unittest复制的示例:

interface A {
  int run();
}

interface B {
  int stop();
  @property int status();
}

class X {
  int run() {
    return 1;
  }

  int stop() {
    return 2;
  }

  @property int status() {
    return 3;
  }
}

auto x = new X();

auto ab = x.wrap!(A, B);
A a = ab;
B b = ab;
assert(a.run() == 1);
assert(b.stop() == 2);
assert(b.status == 3);
Run Code Online (Sandbox Code Playgroud)

这项工作将从v2.064开始提供,它已经在git HEAD上了.