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/