Function 间接函数引用

Function 间接函数引用,function,methods,reference,dart,Function,Methods,Reference,Dart,这个(或类似的东西)不应该起作用吗?和/或我如何以其他方式实现这一点 class A { void init() {initializeSomething()} } main() { var f = A.init; A a = new A(); a.f(); } 通常,我希望存储对实例方法的引用 在某个地方,然后在另一个地方叫它(在大多数其他地方我都可以这么做) 语言(包括JavaScript)。我以为函数是一流的 在飞镖。。。方法不是函数吗?方法不是一流的吗 只要方

这个(或类似的东西)不应该起作用吗?和/或我如何以其他方式实现这一点

class A {
   void init() {initializeSomething()}
}

main() {
   var f = A.init;
   A a = new A();
   a.f();
}
通常,我希望存储对实例方法的引用 在某个地方,然后在另一个地方叫它(在大多数其他地方我都可以这么做) 语言(包括JavaScript)。我以为函数是一流的 在飞镖。。。方法不是函数吗?方法不是一流的吗


只要方法是静态的(这在我的情况下没有用),它就可以工作,但不适用于实例方法…

函数和方法是不同的。只能对具有此方法的类的实例调用方法。
在您的示例(
var f=A.init
)中,您引用了一个实例方法,比如静态(类)方法

有效的方法是:

使
init
静态

class A {
   static void init() => initializeSomething();
   // or
   // static void init() {
   //   initializeSomething();
   // }
}

main() {
   var f = A.init;
   A a = new A();
   a.f();
}
或者使用对
a
的实际实例的
init()
的引用:

class A {
   void init() => initializeSomething();
}

main() {
   A a = new A();
   var f = a.init;
   a.f();
}

功能和方法是不同的。只能对具有此方法的类的实例调用方法。
在您的示例(
var f=A.init
)中,您引用了一个实例方法,比如静态(类)方法

有效的方法是:

使
init
静态

class A {
   static void init() => initializeSomething();
   // or
   // static void init() {
   //   initializeSomething();
   // }
}

main() {
   var f = A.init;
   A a = new A();
   a.f();
}
或者使用对
a
的实际实例的
init()
的引用:

class A {
   void init() => initializeSomething();
}

main() {
   A a = new A();
   var f = a.init;
   a.f();
}

我有合适的团队吗?我点击了dart页面上的链接,上面写着:“在这里提问”。但正如你所看到的,我没有收到任何答复……谢谢你的回复。这似乎真的反映了dart的设计不好,这不是人们所期望的自然工作。实际上,没有任何其他类似的语言将函数/方法视为第一类,而存在此缺陷。有没有dart实施者可以对此发表评论?我应该把它作为bug归档吗?我有正确的组吗?我点击了dart页面上的链接,上面写着:“在这里提问”。但正如你所看到的,我没有收到任何答复……谢谢你的回复。这似乎真的反映了dart的设计不好,这不是人们所期望的自然工作。实际上,没有任何其他类似的语言将函数/方法视为第一类,而存在此缺陷。有没有dart实施者可以对此发表评论?我应该将其作为bug归档吗?我正在尝试获取一个方法的“引用”,以便稍后使用实际实例调用它。init()不能是静态的,或者它不能与实例一起工作。我需要使用的实际实例还不存在。稍后将对其进行实例化,此时我需要通过引用调用init()。你明白我想说什么吗?我不知道有什么方法不使用镜像(反射),这是不鼓励客户端使用的,因为它容易导致代码膨胀。可能还有其他方法可以实现类似的效果,但我需要更多关于您的实际用例的细节,以便能够提出建议。谢谢您的回复。这似乎真的反映了dart的设计不好,这不是人们所期望的自然工作。实际上,没有任何其他类似的语言将函数/方法视为第一类,而存在此缺陷。有没有dart实施者可以对此发表评论?我应该把它作为bug归档吗?什么语言支持这个?也许我错过了什么。我不知道有哪种OO语言可以做到这一点。我认为是开始讨论的合适的地方。如果我没有错的话,迪伦、哈斯克尔、Ruby和C++(通过Virtual)支持这个。我打赌这是一个性能问题,因为(有这个限制)所有的调度信息都可以在编译时计算,并且不需要在运行时保存调度表。如果性能是个问题,那么讨论可能没有什么价值,因为到目前为止,我所看到的省道性能权衡都是为了速度。你不同意我提到的语言吗?如果是这样,我会做进一步的研究。。。也许我错了。我正在尝试获取一个方法的“引用”,以便稍后使用实际实例调用它。init()不能是静态的,或者它不能与实例一起工作。我需要使用的实际实例还不存在。稍后将对其进行实例化,此时我需要通过引用调用init()。你明白我想说什么吗?我不知道有什么方法不使用镜像(反射),这是不鼓励客户端使用的,因为它容易导致代码膨胀。可能还有其他方法可以实现类似的效果,但我需要更多关于您的实际用例的细节,以便能够提出建议。谢谢您的回复。这似乎真的反映了dart的设计不好,这不是人们所期望的自然工作。实际上,没有任何其他类似的语言将函数/方法视为第一类,而存在此缺陷。有没有dart实施者可以对此发表评论?我应该把它作为bug归档吗?什么语言支持这个?也许我错过了什么。我不知道有哪种OO语言可以做到这一点。我认为是开始讨论的合适的地方。如果我没有错的话,迪伦、哈斯克尔、Ruby和C++(通过Virtual)支持这个。我打赌这是一个性能问题,因为(有这个限制)所有的调度信息都可以在编译时计算,并且不需要在运行时保存调度表。如果性能是个问题,那么讨论可能没有什么价值,因为到目前为止,我所看到的省道性能权衡都是为了速度。你不同意我提到的语言吗?如果是这样,我会做进一步的研究。。。也许我错了。