【问题标题】:Smalltalk - Inserting a TAB character (Visual Works)Smalltalk - 插入 TAB 字符 (Visual Works)
【发布时间】:2009-10-29 03:05:00
【问题描述】:

我在两个字符串之间插入制表符时遇到了一些问题。

stringOne := 'Name'.
stringTwo := 'Address'.

我试过了:

info := stringOne, String tab, stringTwo.

info := stringOne, Character tab asString, stringTwo.

但这两条消息都没有被理解。我正在使用 Visual Works。

【问题讨论】:

    标签: string smalltalk squeak


    【解决方案1】:

    Goog 为您提供了一种制作包含选项卡的字符串的方法

    String with: Tab
    

    您自己发现 Tab 在 VisualWorks 中不被理解,应该替换为

    Character tab
    

    所以将这两件事放在一起在工作区中进行评估以检查它是否提供了一个包含制表符的字符串

    String with: Character tab
    

    然后在你的连接中使用它

    info := stringOne, (String with: Character tab), stringTwo.
    

    (如果您要进行大量连接,请使用WriteStream 而不是,

    【讨论】:

    • 不加注意地使用逗号操作符至少是危险的。 String 有一个快捷方式:,它被称为 asString。所以我把它改写为 stringOne copy , Character tab asString , stringTwo
    • 除了在某些版本的VisualWorks中,类Character没有实现asString。在大众 3.5 和 7.8 中对其进行了检查。这也是我几乎总是使用 WriteStream 的原因之一。
    【解决方案2】:

    我没有要检查的 Visual Works,但在 IBM Smalltalk Tab(注意大小写)中是一个制表符。
    也许试试这个:

    info := stringOne, Tab asString, stringTwo.
    

    编辑(回复:您的评论):

    好的,要么Tab 不是制表符的正确名称,要么你的字符类没有响应asString
    试试看Tab class 给你什么,如果它回答“字符”,那么你只需要找出如何在 VisualWorks 中将字符更改为字符串。如果它没有回答“字符”,那么我们在 VisualWorks 中没有找到正确的制表符名称。


    编辑2:

    我不知道在 Visual Works 中将字符转换为字符串的捷径,所以这里有一个无论如何都应该有效的解决方案。这就是asString 所做的一切:
    由于您可能想多次使用它,因此可以将其保存为字符串,

    tabString := String with: Tab.
    info := stringOne, tabString, stringTwo
    

    【讨论】:

    • #asString,消息无法理解。它不适用于 Visual Works。嗯,我什至在网上都找不到它
    • 它回答字符。所以字符选项卡是正确的,但没有将其转换为字符串的方法。没关系,我的东西看起来有点不整齐。不过谢谢
    • 嗯,好吧,那就取决于我不知道的 VisualWorks 的具体情况。然而,我添加了一个更长的解决方案,希望可以工作......
    【解决方案3】:

    使用宏扩展的最短时间:

    info := '<1s><T><2s>' expandMacrosWith: one with: two
    

    【讨论】:

      【解决方案4】:

      基于 WriteStream 的解决方案(它有点冗长,但可以很好地扩展,您可以在循环中使用它,例如 do:separatedBy)

      ws := (String new:50) writeStream.
      ws
          nextPutAll: stringOne;
          tab;
          nextPutAll: stringTwo.
      info := ws contents.
      

      或者如果你真的喜欢一个班轮代码:

      info := (String new writeStream) nextPutAll: stringOne; tab; nextPutAll: stringTwo; contents.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        相关资源
        最近更新 更多