尝试获取Ruby中变量的长度时出错

尝试获取Ruby中变量的长度时出错,ruby,string,string-length,Ruby,String,String Length,我有一个header方法,可以将标准的header写入我抛出的所有文本文件。代码如下: def header(file, description) File.open(file, 'w') do |out| out.puts ".------------------------------------------------------------------------." out.puts "| File generated by: " + Etc.g

我有一个header方法,可以将标准的header写入我抛出的所有文本文件。代码如下:

def header(file, description)
    File.open(file, 'w') do |out|
        out.puts ".------------------------------------------------------------------------."
        out.puts "| File generated by: " + Etc.getlogin() + " " * (52-Etc.getlogin().length) + "|"
        out.puts "| File generated at: " + Time.now().to_s() + "                           |"
        out.puts ".------------------------------------------------------------------------."
        out.puts "| DESCRIPTION:                                                           |"
        out.puts "| " + description.to_s + " " * (70-description.length) + "|"
        out.puts "|                                                                        |"
        out.puts "'------------------------------------------------------------------------'"
        out.puts "=====FINDINGS====="
    end
end
因此,当我运行以下call语句时:

 header('01httpserver.txt', "This file details all configuration files with where http servers are concerned.")
我得到以下错误:

cis.rb:63:in `*': negative argument (ArgumentError)
    from cis.rb:63:in `block in header'
    from cis.rb:57:in `open'
    from cis.rb:57:in `header'
    from cis.rb:70:in `<main>'

我做错了什么?

问题是您的描述超过70个字符,因此您将字符串乘以负值,这是不允许的

要解决此问题,请将出现错误的行更改为:

out.puts "| " + description.to_s + " " * [0, (70-description.length)].max + "|"

问题是您的描述超过70个字符,因此您将字符串乘以负值,这是不允许的

要解决此问题,请将出现错误的行更改为:

out.puts "| " + description.to_s + " " * [0, (70-description.length)].max + "|"

如果您想进行字符串填充,那么为什么不使用
sprint
表示法呢

out.puts "| %-70s|" % description.to_s
这就使用了这个方法。
%-70s
表示填充字符串到70个空格,左对齐。没有
-
,它是右对齐的

任何过长的值都将溢出此点。要处理这个问题:

out.puts "| %-70s|" % description.to_s[0,70]

这应该限制在前70个字符。在Rails环境中有一个名为的方法,它可以添加省略号来显示发生的截断。

如果您想进行字符串填充,那么为什么不使用
sprint
表示法呢

out.puts "| %-70s|" % description.to_s
这就使用了这个方法。
%-70s
表示填充字符串到70个空格,左对齐。没有
-
,它是右对齐的

任何过长的值都将溢出此点。要处理这个问题:

out.puts "| %-70s|" % description.to_s[0,70]

这应该限制在前70个字符。在Rails环境中,有一个名为的方法,可以添加省略号来显示发生的截断。

。谢谢是的,就是这样。谢谢