Smalltalk中new和initialize的区别?

2024-01-02

新手问题,new和initialize有什么区别?


确切地。当您发送消息#new时,它不仅创建对象,而且发送消息#initialize。这使您可以自定义对象的初始化。看:

Behavior >> new
"Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

^ self basicNew initialize

进而:

 ProtoObject >> initialize
"Subclasses should redefine this method to perform initializations on instance creation" 

And:

   Behaviour >> basicNew
"Primitive. Answer an instance of the receiver (which is a class) with no 
indexable variables. Fail if the class is indexable. Essential. See Object 
documentation whatIsAPrimitive."

<primitive: 70>
self isVariable ifTrue: [ ^ self basicNew: 0 ].
"space must be low"
OutOfMemory signal.
^ self basicNew  "retry if user proceeds"

所以...#basicNew 是创建对象的原语。通常,您使用#new,如果您不需要任何特殊的内容,则无需实现#initialize,因此将执行#ProtoObject 的空实现。否则,您可以直接发送#basicNew,但您可能不应该这样做。

Cheers

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Smalltalk中new和initialize的区别? 的相关文章

  • MVC控制器(Controller)与策略模式(Strategy)

    MVC控制器 Controller 与策略模式 Strategy 转载时请注明出处和作者联系方式 http blog csdn net absurd 作者联系方式 Li XianJing
  • function/bind的救赎(上)

    本文转自孟岩的博客 http blog csdn net myan article details 5928531 这是那篇C 0X的正文 太长 先写上半部分发了 Function bind可以是一个很简单的话题 因为它其实不过就是一个泛型
  • Smalltalk 中的运算符可以过载吗?

    Smalltalk 中是否可以重载运算符 我正在寻找教程 示例 Thanks Smalltalk 中不可能进行方法重载 相反 方法重写和称为的技术的组合双重调度用于实现与其他语言中的运算符重载相同的行为 您可以在数学运算符中找到示例实现 这
  • Pharo 中的彩色窗口主题?

    如何在 Pharo 中切换到彩色窗口主题 不确定你指的是哪个主题 但你尝试过吗 世界菜单 gt 系统 gt 设置 gt 外观 gt 形态 gt 用户界面主题 选择框将让您选择窗口颜色主题
  • GOF 中提到的可插拔适配器

    Stack Overflow 上与此主题相关的帖子 Post 1 and Post 2 上面的帖子很好 但我仍然无法解答我的困惑 因此我将其作为新帖子放在这里 我的问题基于 GOF 的可重用的面向对象软件的元素关于可插拔适配器的书籍内容 在
  • Pharo 有 CAS 吗?

    在学习Python时 我发现了SymPy模块 它实际上是一个完整的计算机代数系统 CAS 你可以用它来解决数学中的符号问题 比如微分方程 多项式等等 现在我正在学习 Pharo 我想知道是否有一种方法可以在 Pharo 中进行符号数学运算
  • 是什么让 Smalltalk 能够进行图像持久化,为什么像 Ruby/Python 这样的语言不能自我序列化?

    在smalltalk中 您可以将世界状态保存到图像文件中 我认为这与 Smalltalk 的 序列化 自身能力有关 也就是说 对象可以生成自己的源代码 1 这是一个准确的理解吗 2 将这种能力添加到现代语言 显然是非 Lisp 中面临的挑战
  • 法罗双重调度

    有人可以解释一下 Pharo 4 0 中使用 Smalltalk 进行双重调度的过程吗 我是 Smalltalk 的新手 很难掌握这个概念 因为与 Smalltalk 相比 它在 Java 中的实现方式非常不同 如果有人能用一个例子来解释它
  • Pharo Smalltalk 中 = 和 == 有什么区别?

    有什么区别 and 在 Pharo Smalltalk 中 他们叫什么名字 一个isEqual和另一个 equality inequality deep equality inequality shallow 需要考虑的一件重要的事情是 不
  • Squeak/Pharo Web 服务的微框架

    许多语言都有用于编写非常小的网站或 Web 服务的微框架 例如用于 Python 的 Flask 或用于 Ruby 的 Sinatra 在 Squeak 上 似乎没有任何类似的东西 伊利亚特 海边 和 AIDA 都非常重 只是提供了一点服务
  • Squeak Smalltalk,为什么有时简化的方法不起作用?

    2332 2332 reduced 2332 2 reduced 2332 322 reduced 1166 161 2332 3 reduced 2332 3 2332 2432423 reduced 2332 2432423 看看上面的
  • 面向对象的实现策略

    我目前正在 Squeak 环境中学习 Smalltalk 并且正在阅读 Squeak A Quick Trip To ObjectLand 我带着一些 Python 和 Java 的先验知识进入了面向对象范式 书中第 36 页的这句话让我想
  • 扩展默认类(SmallInteger)

    我正在尝试使用新的实例方法 square 来扩展 SmallInteger 类 我的想法是我希望能够调用 5 square 它会返回 25 使用实例方法扩展您自己的类相当简单 因为您知道变量名称 但我不知道 SmallInteger 类中的
  • Linux 上的 Squeak SMTP

    我正在使用 Squeak 5 类 SecureSMTPClient 通过 SSL TLS 发送电子邮件 它在我的 Windows 机器上运行良好 感谢答案那个问题 https stackoverflow com questions 3761
  • Smalltalk 中的 self 和 self 有什么区别?

    在 Smalltalk 中 方法体中经常出现两个术语 self and yourself 它们之间有什么区别 保留字self是一个伪变量 不能分配给它 它引用使用它的方法的当前接收者 另一方面yourself是一条消息 您可以发送给任何对象
  • Pharo Smalltalk 中的 For 循环 for 数组

    我正在尝试创建一个包含随机数 仅 0 或 1 的数组 但是当我运行它时 它只打印以下内容 遇到语句列表结尾 gt 这是我的代码 GenList lista lista Array new 31 1 to 30 do i lista at i
  • Smalltalk:原语是如何实现的?

    我知道一切都是对象 您可以向 Smalltalk 中的对象发送消息来执行几乎所有操作 现在我们如何实现一个对象 内存表示和基本操作 来表示原始数据类型 例如如何 对于整数的实现 我查看了 Smalltalk 的源代码并发现了这个Smalli
  • 是否可以从命令行运行 Smalltalk 脚本?

    我发现了一个 可能过时且不正确 2004 年的博客文章 http www ianbicking org where smalltalk went wrong html它声称不可能从命令行运行 Smalltalk 脚本 从那时起有什么变化吗
  • Pharo 中的绘图表

    我想显示一个值表并能够选择单元格 我该如何在 Pharo Smalltalk 中执行此操作 我听说过 Morphic 小部件能够做到这一点 但我对 Smalltalk 仍然很陌生 我会研究 TreeModel 类的侧面示例 我曾经这样做过
  • Smalltalk Pharo ZdcSecureSMTPClient 在 GMail 中未显示 html 格式?

    我正在使用 ZdcSecureSMTPClient 将 html 格式的字符串发送到 gmail 帐户 但是当我发送它时 它会将 html 编码显示为纯文本 IE mailMessage MailMessage empty mailMess

随机推荐