Ruby 如何从文本文件中读取并创建具有文本行的类实例,以将它们放入数组中?
我有一个名为“test.txt”的文本文件,其内容如下:Ruby 如何从文本文件中读取并创建具有文本行的类实例,以将它们放入数组中?,ruby,class,Ruby,Class,我有一个名为“test.txt”的文本文件,其内容如下: Hello world Cat and dog It is hot outside 在我的代码中,我试图从文件中读取一行文本,并用我刚刚读到的句子创建一个“Object”类的实例。我知道如何在不使用类实例的情况下实现这一点,但对于我正在进行的一个更大的项目,我试图了解如何从文件中读取行,使用读取行创建类实例,然后创建类实例数组。我走对了吗 class Object attr_accessor :str def initiali
Hello world
Cat and dog
It is hot outside
在我的代码中,我试图从文件中读取一行文本,并用我刚刚读到的句子创建一个“Object”类的实例。我知道如何在不使用类实例的情况下实现这一点,但对于我正在进行的一个更大的项目,我试图了解如何从文件中读取行,使用读取行创建类实例,然后创建类实例数组。我走对了吗
class Object
attr_accessor :str
def initialize(sent)
@str = sent
end
end
class Solution
attr_accessor :array
def initialize
@array = Array.new
end
def make_Array
File.open("test.txt").each do | line |
@array << Object.new(line.chomp)
end
print @array
end
end
类对象
属性存取器:str
def初始化(已发送)
@str=已发送
结束
结束
类解决方案
属性存取器:数组
def初始化
@array=array.new
结束
def make_阵列
打开(“test.txt”)。每个do行|
@数组我强烈建议您创建自己的类
class LineWrapper
attr_reader :content # if you don't want others to change the value, make the attribute read-only.
def initialize(content)
@content = content
end
end
# suppose the file size is small enough to hold in memory
array = File.readlines('test.txt').map!{|line| LineWrapper.new(line)}
# print the array
pp array
但在你采用这种方法之前,你应该问问自己为什么需要额外的课程?简单的字符串不够好吗?“为了大型项目的目的”不足以说服我需要创建包装器类,因为Ruby字符串非常好,几乎可以做任何我想做的事情。如果这还不够的话,我会在我的项目中加入ActiveSupport
。这将覆盖Object::initialize
,其后果将很糟糕。@CarySwoveland是的,我一直看到警告消息。正确的方法是什么?那么为什么要使用monkey patchingObject
而不是创建自己的类?为什么在这里使用map更好??我想我不明白为什么在这里使用map是可以的,但是从文件中读取句子后直接将其放入数组会给我一条警告信息。我的作业中的一个要求是将类实例放入一个数组中,该数组是另一个类中的实例变量。那么在这种情况下使用map还可以吗?@Karen警告来自对象。new
,而不是数组::@Karen您需要一个类,其实例包含一个包含多个LineWrapper
实例的数组。我相信你可以自己解决:)