【问题标题】:new line in squeak吱吱声中的新行
【发布时间】:2009-05-19 08:58:25
【问题描述】:

我想做这样的事情:成绩单显示:'\n'。怎么样?

【问题讨论】:

    标签: smalltalk squeak


    【解决方案1】:

    使用以下内容:

    Transcript cr
    

    您可以通过级联在值之后使用它:

    Transcript show: 123; cr
    

    【讨论】:

      【解决方案2】:

      根据我的(长期)经验,缺少字符转义是 Smalltalk 中缺少的少数内容之一。对于流媒体,使用 cr、tab 等的解决方案都可以。

      但是,如果您需要字符串中的特定控制字符,这可能很难看且难以阅读(使用“streamContents:”或“withCRs”添加新行)。或者,您可能希望使用一种(非标准)字符串扩展机制。例如,在 VisualWorks 或 Smalltalk/X 中,你可以这样写(如果我没记错的话):

      'someString with newline<n>and<t>tabs' expandMacros
      

      甚至可以对其他对象的 printStrings 进行类似 printf 的切片:

      'anotherString<n><t>with newlines<n>and<t>tabs and<p>' expandMacrosWith:(Float pi)
      

      我猜,Squeak 和 V'Age 也有类似的东西。

      但是,请注意:这些扩展是在执行时完成的。因此,在许多字符串上大量使用它们时,您可能会遇到惩罚。

      【讨论】:

      • 第一个在Pharo中工作,第二个导致错误,但这可能是一个错误;还在调查中……
      • 如果你用 ['someString with newlineandtabs' expandMacros] 表达你的意图只执行一次,惩罚可以减轻见When you come Back
      【解决方案3】:

      可以通过Character cr 访问角色本身。所以,你也可以这样做:

      Transcript show: 'Bla! , Character cr asString.
      

      当然,

      Transcript show: 'Bla!' ; cr.
      

      更优雅。

      【讨论】:

      • 字符 cr asSymbol* 和 'Bla!'
      【解决方案4】:

      为了方便起见,我在 String 类中添加了一个方法“line”:

      line
          ^self, String lf
      

      那你就说obj showSomething: 'Hello world!' line.

      或者叫它换行符、endl、lf 等...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多