gpt4 book ai didi

metaprogramming - Class 实例有什么问题?

转载 作者:行者123 更新时间:2023-12-04 07:22:39 26 4
gpt4 key购买 nike

如果有人能解释为什么在 Smalltalk 中,表达式会很好

class := Class new
name: 'OurClass';
superclass: Object

不适合创建新类。更准确地说,当像 class 这样的对象试图充当普通类时,什么是错的,什么是对的?它可以创建实例吗?它可以编译方法吗?它不能做什么?

最佳答案

您没有指定您使用的是哪种 Smalltalk 方言(例如,这在 Squeak 或 Cuis 中不起作用),但我假设它是 Pharo,因为它在那里执行时没有错误。在 Pharo 中,它实际上似乎确实创建了一个令我感到惊讶的新类......在其他 Squeak 方言中,我认为它甚至不会远程执行您想要的操作。所以第一个问题是它不标准,但这相对较小......

在本次讨论中,我们假设您的示例代码在 Smalltalk 方言中得到支持,并且完全按照您的意愿执行:创建一个新类 OurClass 作为 Object 的子类。更大的问题是您创建的本质上是一个与 Smalltalk 环境的其余部分断开连接的孤岛,因为您已经绕过了所有 Smalltalk 元数据/元结构。所以你不能做像打开浏览器窗口并找到“OurClass”这样简单的事情……Smalltalk 的其余部分不知道它。 OurClass new 这样的东西是行不通的。您的新类也没有根目录,因此如果您从示例中丢弃 class 变量,该类就会消失。这也意味着它不会成为任何包的一部分,并且您的类定义不会与源代码的其余部分一起保存。由于以这种方式做事,您可能会遇到其他惊喜(即调试器可能会阻塞等)因此对于通用类创建需求,它有什么问题?几乎所有内容。

也就是说,在一个用例中,您可能合法地希望以这种方式创建类:metaprogramming .一个有效的元编程用例是创建一个匿名类,您恰好需要这种“断开连接”的行为类型,并且临时/内部需要一个类,但不希望其他人看到/使用它Smalltalk 环境。只要你真的想要并且需要以这种方式做事,我认为它没有问题。有几次我需要这样的东西(从来没有完全这样做过,但是很接近)我一定会很好地记录它,因为这不是那种你可能会在 6 个月后记住的东西做或为什么......更不用说另一个程序员了。对于您有特定需求的元编程,这是完成这项工作的正确工具,它有什么好处?几乎所有内容。

关于metaprogramming - Class 实例有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com