我正在尝试使用我的本地服务器,然后编写了一个小程度的ruby程序来填充RAM。但实际上我必须将要放入RAM的字节数减半。我在这里遗漏了什么或这是一个错误吗?
这里是代码:
class RAM
def initialize
@b = ''
end
def fill_ram(size)
puts 'Choose if you want to set the size in bytes, megabytes or gigabytes.'
answer = ''
valid = ['bytes', 'megabytes', 'gigabytes']
until valid.include?(answer)
answer = gets.chomp.downcase
if answer == 'bytes'
size = size * 0.5
elsif answer == 'megabytes'
size = size * 1024 * 1024 * 0.5
elsif answer == 'gigabytes'
size = size * 1024 * 1024 * 1024 * 0.5
else
puts 'Please choose between bytes, megabytes or gigabyte.'
end
end
size1 = size
if @b.bytesize != 0
size1 = size + @b.bytesize
end
until @b.bytesize == size1
@b << '0' * size
end
size = 0
end
def clear_ram
exit
end
def read_ram
puts 'At the moment this program fills ' + @b.bytesize.to_s + ' bytes of RAM'
end
end
想象一下,每行的"* 0.5"
都不会存在。
我在IRB中测试了它,只是创建了一个新的RAM对象,并用1000兆字节的数据填充它。在我的情况下,它实际上填充了2000兆字节的数据,所以我确实为每一行添加了0.5
次,但这不是解决方案。
答案 0 :(得分:3)
当我跑步时,我得到:
Choose if you want to set the size in bytes, megabytes or gigabytes.
bytes
At the moment this program fills 512 bytes of RAM
我认为问题是缺少对编码的检查。
我用US-ASCII(一个字符= 1个字节)运行我的测试。
如果您使用UTF-16运行它,则可以解释您的问题。
您可以尝试以下代码来检查您的编码:
p Encoding.default_internal
p Encoding.default_external
阅读评论后:
脚本的结果取决于RAM.fill_ram
的参数。你如何开始你的剧本 - 你多久打电话给RAM.fill_ram
?
请提供完整的代码。
我用
打电话给我的例子r = RAM.new
r.fill_ram(1024)
r.read_ram