我有一个任务(这意味着我必须对我使用的方法非常严格)。
所以我有这个模拟文件的类文件。它所做的只是 - 它包含nil或单个字符串,或单个符号,或单个数字或单个布尔值(true / false)。所以我有一个initializes
文件的方法,我也有一个方法data_type
来确定文件内容的类型(#class
),getter / setter等等。
我也有这个class Dictionary
,其中可能包含其他目录和文件。我应该在其中包含以下方法:
add_file(name, file)
- 添加名为name
的文件。 file
应该是class File
的对象,但我们无需检查输入对象是否真的属于此类。
add_directory(name, directory)
- 添加名称为name
的目录。 directory
是class Directory
的对象。它可能会被遗漏,在这种情况下会创建一个空目录。
我已经完成了所有class File
方法,但我在class Directory
中提到我提到的两种方法时遇到了问题。它们有很多相似之处,所以对add_file(name, file)
的评论应该足够了。
我能想到的只是name = File.new
,但它不仅不起作用,而且还遗漏了file
我完全不知道是什么的事情。
def add_file(name, file)
name = File.new
@name = name
end
这当然是非常不正确的,但我只能想到。
感谢所有帮助。谢谢!我很抱歉问这么愚蠢的问题。
请记住,这只是模拟!这些文件不是实际文件。 file
只是一个适合的随机名称。我非常怀疑我应该require
任何事情!
name
匹配。但是......我仍然非常困惑。
EDIT2:@files[name] = file
并且@files
为哈希值的内容?
答案 0 :(得分:1)
您可能希望将类File
更改为其他名称,因为已有File
类。
我猜任何方式都是这样的:
好的,所以我重新阅读了你的操作,并意识到字典是一个拼写错误,因此重新编写代码,因此它现在类似于:
class Directory
attr_accessor :name,:store
def initialize name
self.name = name
self.store = {}
end
def add_file(file)
self.store[file.name] = file
end
def add_directory(directory)
self.store[directory.name] = directory
end
def [](name)
self.store[name]
end
end
class File
attr_accessor :name, :content, :data_type
def initialize name,content = nil,data_type = nil
self.content = content
self.name = name
self.data_type = data_type || content.class
end
end
然后你可以做
file1 = File.new('hw.rb','puts "hello world!"', 'ruby file')
file2 = File.new('gbw.rb','puts "good bye world!"', 'ruby file')
root = Directory.new('root')
rb = Directory.new('rb')
rb.add_file(file1)
root.add_file(file2)
root.add_directory(rb)
puts root['rb']['hw.rb'].content
如果您在add_file
和add_directory
方法中使用了splat运算符参数,则可以通过参数进行迭代并添加每个文件,以便您可以像
file1 = File.new('hw.rb','puts "hello world!"', 'ruby file')
file2 = File.new('gbw.rb','puts "good bye world!"', 'ruby file')
root = Directory.new('root')
root.add_file(file1,file2)
研究'ruby splat operator arguments'以了解我的意思