我拼命想在Smalltalk中编写一个非常基本的方法来转义HTML标记('<'和'>')。
到目前为止,这是我提出的:
escapeHtml: str
|tags newString tmpString|
newString := String new.
tags := Dictionary new.
tags at: '<' put: '<'.
tags at: '>' put: '>'.
tags keysAndValuesDo:
[ :k :v |
tmpString := str copyReplaceAll: k with: v.
newString := tmpString
].
^newString
!
不幸的是,它似乎只替换了tags
字典的最后一项。我究竟做错了什么?我可能还应该指出,我对Smalltalk的经验很少。
选择的口译员是'syx'。
答案 0 :(得分:3)
我认为你想要制作像
这样的东西newString := str
然后在keysAndValuesDo:
块:
tmpString := newString copyReplaceAll: k with: v.
因为您现在为每个键/值对生成tmpString
,只更换了一个键。比你将它分配给newString
。为了实现您的目标,您应该将copyReplaceAll:
发送到在上一次迭代中处理的字符串。这可以通过向newString
发送消息来完成,但是对于第一次迭代工作,您应该为其分配str
的值。
<强> P.S。强> 我也认为这个更干净的版本应该有效:
escapeHtml: str
|tags newString|
newString := str copy.
...
tags keysAndValuesDo: [ :k :v | newString replaceAll: k with: v ].
^newString