【问题标题】:How can I print a string contained in an object as literal with Ruby?如何使用 Ruby 将对象中包含的字符串打印为文字?
【发布时间】:2023-03-11 19:25:01
【问题描述】:

我正在尝试编写一个程序来检测文件是否有\n\r\n 行结尾,然后修复它们。我希望让脚本向控制台输出一些消息,但我遇到了麻烦。我不知道如何将行尾打印为文字。

这是我检查行尾类型的方法:

def determine_line_ending(filename)
  File.open(filename, 'r') do |file|
    return file.readline[/\r?\n$/]
  end
end
ending = determine_line_ending(ARGV.first)

假设此方法将返回\n\r\n,如果它与文件第一行的其中一个模式匹配。

然后我想在控制台打印出检测到的结束类型,但如果我使用puts ending,那么它只会在控制台中添加一行结尾。我知道如果我使用puts '\r\n',那么它会直接打印它们,或者如果我使用双引号,我只需要转义反斜杠。但我对 Ruby 还很陌生,我很难找到一种方法将我的变量打印为文字而不是字符串。

【问题讨论】:

标签: ruby string-literals line-endings


【解决方案1】:

如果我理解你的话,如果行尾是 \r,你想打印 "\r" 字符串,如果是 \r\n,你想打印 "\r\n"。

在这种情况下你可以使用 dump 功能是你所需要的:

puts ending.dump // => "\r" or "\r\n"

【讨论】:

    【解决方案2】:

    我会使用方法String#inspect:

    s = "abc\n\rdef"
    puts s
    puts s.inspect
    

    这是在所有对象上定义的非常方便的方法。你可以打印散列、数组等等。

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2014-10-07
      • 2020-10-18
      • 2021-04-03
      • 1970-01-01
      相关资源
      最近更新 更多