Smalltalk - 是否可以通过方法将字符串添加到 String 实例?

标签 smalltalk pharo

Smalltalk - 是否可以通过方法将字符串添加到 String 实例?

基本上我想要一些类似的东西:

renderThisOn: aString

aString append: 'whatever text I want'

本质上,我希望 String 实例(ByteString 等)的行为类似于 Seaside 中的“html”对象。我将它作为参数传递给多个方法,每个方法都添加了一些信息。

最佳答案

从实际的角度来看,答案是否定的,不可能改变字符串的大小。您可以修改字符串的字符:

a := 'abc'.
a at: 2 put: $x.
a = 'axc' "true"

因此,当您连接两个字符串时,您会得到第三个字符串,而其他两个字符串保持不变
s := 'abc'.
t := 'def'.
u := s , t.
s = 'abc'. "true"
t = 'def'. "true"

话虽如此,实际上有一种方法可以增加(或缩小)字符串。这个想法是使用 become: (或 becomeForward:)。此消息将使用对参数的引用替换对接收器的所有引用。在你的情况下:
s := 'abc'.
t := 'def'.
assoc := s -> 3 "referene to s"
s become: s , t.
s = 'abcdef'. "true"
assoc key == s "true"

我之所以开始我的回答是说你不能改变字符串的大小是因为在绝大多数情况下使用 become:是矫枉过正,推荐的做法是审查代码并消除修改对象结构的需要。

关于Smalltalk - 是否可以通过方法将字符串添加到 String 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28519066/

相关文章:

smalltalk - Pharo:引用类名而不是 "self class"

smalltalk - 为什么 instanceVariableNames 是一个字符串而不是一个更结构化的集合

combinations - 从 Smalltalk 中的集合生成所有组合

smalltalk - 下面的常量方法实例中数字 10 之前的向上箭头是什么?

smalltalk - 为什么 Metaclasses 是 Metaclass 而不是 Class 的实例?

smalltalk - 我们如何在不在 Playground 上实例化对象的情况下运行 pharo 程序?

Pharo 模拟框架

smalltalk - 如何在 Smalltalk 中通过其 stdin、stdout、stderr 与子进程交互?

smalltalk - 如何查找一个类是否是我的类实例的父类(super class)