Reflection 基于镜像的反射与传统反射有什么区别?
像Dart这样的一些语言使用基于镜像的反射,因此,简单地说,这种实现与您在C#或Java中看到的传统反射有什么区别 更新: 我发现这段由吉拉德·布拉卡(Gilad Bracha)在《新话》(Newspeak)中拍摄的关于镜像反射的精彩视频(有些古怪)。 (mirror stuff 7:42开始)您最好的选择是Dart的联合设计师和规范作者。为了一瞥,读第一章可能就足够了 摘要声称镜子遵循三个传统反射所不遵循的必要原则: 我们确定了反射和元编程的三个设计原则 面向对象编程语言中的工具封装: 元级设施必须封装它们的实现。 分层:元级设施必须与 基本功能本体论对应:本体论 元级设施应与 他们操纵的语言。传统/主流反思 建筑不遵循这些规则。相比之下,反射性 围绕镜像概念构建的API的特点是 坚持这三项原则Reflection 基于镜像的反射与传统反射有什么区别?,reflection,programming-languages,dart,language-design,dart-mirrors,Reflection,Programming Languages,Dart,Language Design,Dart Mirrors,像Dart这样的一些语言使用基于镜像的反射,因此,简单地说,这种实现与您在C#或Java中看到的传统反射有什么区别 更新: 我发现这段由吉拉德·布拉卡(Gilad Bracha)在《新话》(Newspeak)中拍摄的关于镜像反射的精彩视频(有些古怪)。 (mirror stuff 7:42开始)您最好的选择是Dart的联合设计师和规范作者。为了一瞥,读第一章可能就足够了 摘要声称镜子遵循三个传统反射所不遵循的必要原则: 我们确定了反射和元编程的三个设计原则 面向对象编程语言中的工具封装: 元级设
我还想指出Gilad最近的另一个回答,他列出了一些其他伟大的参考资料:对于许多用途,我认为镜像与Java反射没有什么不同。了解镜像最重要的一点是,镜像将反射API与标准对象API解耦,因此使用反射(obj)而不是obj.getClass()。这看起来差别不大,但它给了你一些好处:
var methods = [];
for (var m in myObject) {
if (typeof m === 'function') {
methods.push(m);
}
}
谢谢你,约翰。我以前确实看到过这些链接。我希望能很快得到一个总结或要点,而不是阅读这篇论文。在我看来,许多差异都是在软件工程的层面上,对于我们这些在此基础上编写软件的人来说并不那么有趣。对我来说,使用镜像比使用.net反射API更容易。
reflect(myObject).type.methods; // returns a map
var methods = [];
for (var m in myObject) {
if (typeof m === 'function') {
methods.push(m);
}
}