gpt4 book ai didi

smalltalk - Smalltalk 中定义的类变量在哪里?

转载 作者:行者123 更新时间:2023-12-03 20:23:49 28 4
gpt4 key购买 nike

我想知道,如果我定义一个新的类变量,例如为类 MyClass , 定义将在 MyClass 中或在 MyClass class ?是否MyClass class甚至知道新的类变量?

最佳答案

是的,类变量与类和元类共享。它们还与所有子类(及其元类)共享。类变量通常大写,以更好地传达在比类更广泛的范围内共享的想法。您在类(而不是元类)中定义类变量。
类变量不应与类实例变量混淆,类实例变量是在元类级别定义的实例变量,即类对象的实例变量。尽管这个概念很简单(或正因为如此),但这个概念还是有些晦涩:实例变量总是在类中定义以定义其实例的形状(槽)。因此,如果我们将此定义应用于元类,即类的类,此处定义的实例变量定义其实例的形状,其中(通常)只有一个,即类。
回到类变量,您在类(inst 端)中定义它们并在元类(即类端)中初始化它们。请记住,这些是(部分)全局变量,它们将在实例、子实例、子类和元类之间共享,因此必须像对待全局变量一样谨慎处理它们。

再澄清一点
当我们说实例变量在实例和子实例之间共享时,我们指的是它们的名称(以及对象槽在内存中的位置);我们不是指它们的值(所述插槽的内容)。因此,类 C 的两个实例将共享名称,例如 color , 如果该类定义了 ivar color ,但它们在每个实例中的值将是独立的。换句话说,它共享的是名称,而不是值。
对于类变量,共享的是名称和值。它实际上是 Association对象,例如 Theme -> aTheme ,什么是共享。因此,对类变量值的任何修改都会影响其所有引用。类实例变量不是这种情况,因为它们只是实例变量,除了它们塑造类及其子类,而不是常规实例和子实例。

有关 Smalltalk 变量的更多信息,请参阅 https://stackoverflow.com/a/42460583/4081336

关于smalltalk - Smalltalk 中定义的类变量在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65795713/

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