我很难理解红宝石。我希望有一个程序,用户可以在其中输入一组文本,然后带星号返回。到目前为止,我已经可以通过.txt文件执行此操作。谁能解释我哪里出问题了?我在红宝石方面挣扎很多。
Image of outcome when I run it
print "Please enter any length of text:"
user_input = String(gets.chomp)
h = Hash.new
f = user_input
f.each_line { |line|
letters = line.split(//)
letters.each { |w|
if h.has_key?(w)
h[w] = h[w] + 1
else
h[w] = 1
end
}
}
# sort the hash by
h.sort{|a,b| a[1]<=>b[1]}.each { |elem|
puts "\"#{elem[0]}\": " + '*' * elem[1]
}
我遇到的错误消息
Undefined method `chomp' for nil:NilClass (NoMethodError)
答案 0 :(得分:0)
在当前正在运行Ruby程序的Atom脚本运行程序中,您无法使用gets
从标准输入中读取内容。看来script-runner package可以对此进行扩展,以提供脚本的真实终端,然后您还可以在其中使用STDIN。
或者,您也可以从真实的控制台运行程序。为此,您可以从命令行窗口运行它,例如ruby name_of_program.rb
,而不是从Atom启动。
答案 1 :(得分:0)
gets
方法必须单独调用。在第二行尝试一下:
user_input = gets.chomp
没有String
。
我希望它对您有用。 :)
答案 2 :(得分:0)
您的代码按预期工作。您通过在文本编辑器中而不是通过控制台运行代码来出错。 Kernal#gets
方法需要用户输入,为了在您的文本编辑器中运行,需要进行模拟。由于您的编辑器返回的是nil
而不是用户输入的字符串格式,因此chomp
方法将引发您的NoMethodError
。
基本上,您的代码很好,但是您试图在有限的环境中运行它。作为初学者,如果您的代码需要用户输入,则使用ruby <filename.rb>
通过控制台/终端运行ruby文件,可以更轻松地测试代码。