我正在尝试构建一个非常简单的计算机模块,允许您创建文件,查看和编辑它们。我遇到了未定义的方法和实例变量的确切性质的问题。我稍后会谈到这些。你可以去博士,然后去粗体区域。
class Computer
@@users = Hash.new
def initialize(username, password)
@username = username
@password = password
@files = Hash.new
@files["Groceries.txt"] = "10:20"
@files["Blane.txt"] = "10:30"
@@users[username] = password
end
def create(filename)
time = Time.now
@files[filename] = time
puts "A new file, #{filename}, was created at #{time}"
end
def Computer.get_users
return @@users
end
end
所以我只是在这里定义我的类变量“Computer”。
puts "You need to login!"
puts "Username?"
userName = gets.chomp.downcase
puts "Password?"
passWord = gets.chomp
my_computer = Computer.new(userName, passWord)
puts "You logged in with Username: #{userName}"
puts "and Password: #{passWord}"
puts "What would you like to do?"
puts "-- Create a file (type create)"
puts "-- Change a file (type change)"
puts "-- View a file (type view)"
puts "-- Delete a file (type delete)"
answer = gets.chomp.downcase
case answer
when "create"
puts "What is the name of the file?"
@create = gets.chomp.capitalize
if @files[@create].nil?
my_computer.create(@create)
else
puts "That file already exists!"
end
when "change"
puts "What is the name of the file you want to change?"
@files.each do |x, y|
puts "#{x}: #{y}"
end
@change = gets.chomp.capitalize
end
现在我收到错误“未定义的方法`[]'为nil:NilClass”指的是
if @files[@create].nil?
只是检查新文件是否已经在其中。我不知道这是一个问题,我在哪里定义变量,或者它是实例变量,还是问题所在。此外,如果我添加行:
my_computer.initialize(userName, passWord)
我收到以下错误: 私有方法`initialize'调用#
我的最后一个问题是,当我尝试使用以下代码打印出已存在的文件名时
@files.each do |x, y|
puts "#{x}: #{y}"
end
我收到以下错误: 未定义的方法`每个'为nil:NilClass
我认为.each方法是通用的,但现在看来我必须在课堂上定义它?
对不起文字的墙,但我对ruby很新,这是我的第一个编程语言,所以我想弄清楚语言的细微差别。提前谢谢!
答案 0 :(得分:0)
if @files[@create].nil?
和
@files.each do |x, y|
puts "#{x}: #{y}"
end
此代码位于Computer
类定义之外。由于@files
是一个类实例变量(它在Class Computer... end
块中定义),因此它只能在类本身中访问。它无法访问它。
my_computer.initialize(userName, passWord)
您无法直接调用initialize
方法。或者,当您调用new
方法时,会自动调用此方法。所以你的代码:
my_computer = Computer.new(userName, passWord)
自动拨打initialize
上的my_computer
。