您没有指定要使用哪种Smalltalk方言(例如,这在Squeak或CUI中不起作用),但我将假设它是Pharo,因为它在那里执行时没有错误。在Pharo中,它实际上似乎创建了一个新的类,这让我吃惊。。。在其他吱吱叫的方言中,我认为它甚至不会做你想做的事。所以第一个问题是它是不标准的,但那是相对较小的。。。
在本次讨论中,假设您的示例代码在Smalltalk方言中受支持,并完全按照您的要求执行:创建一个新类OurClass作为对象的子类。更大的问题是,您所创建的实际上是一个与Smalltalk环境的其余部分断开连接的孤岛,因为您已经绕过了所有Smalltalk元数据/元结构。所以你不能做一些简单的事情,比如打开一个浏览器窗口,找到“我们的类”。。。其他的Smalltalk都不知道。像这样的事情
OurClass new
class
变量从您的示例中,类将消失。这也意味着它不会成为任何包的一部分,并且类定义不会与其他源代码一起保存。这样做可能会让您遇到其他意外(例如,调试器可能会阻塞它等),因此对于通用类创建需求,它有什么问题?几乎所有的事情。
metaprogramming
. 一个有效的元编程用例是创建一个匿名类,在这个匿名类中,您需要这种“断开连接”的行为,并且临时/内部需要一个类,但不希望它被其他Smalltalk环境看到/使用。只要你真的想这样做,我觉得没问题。有几次我需要这样的东西(从来没有这样做过,但很接近),我肯定会把它记录得很好,因为这不是那种你6个月后可能会记得你在做什么或为什么。。。更不用说另一个程序员了。对于你有特殊需求的元编程来说,这是一个合适的工具,有什么用呢?几乎所有的事情。