Ich glaube nicht, Solution.new
nil
in Ihrem Beispiel zurückkehrt, wird es eine neue Instanz der Lösung zurückkehrt (foo
in Ihrem Beispiel)
Ihr Hauptproblem ist, dass read_file
gibt den Wert File.foreach
zurück, der immer nil
ist.
Für den Anfang, aktualisieren Sie Ihre read_file
Methode das Array zurück selbst:
class Solution
def read_file
array = []
lines = []
File.foreach('test.txt') do |line|
lines << Line.new(line)
end
array << lines
array
end
end
solution = Solution.new
solution.read_file
# outputs:
# [#<Line:0x007fab92163b50 @content="This Is A Line\n">, #<Line:0x007fab92161be8 @content="Line 2\n">, #<Line:0x007fab92160d88 @content="Line3">]
Wenn Sie ein Array von Arrays zurückgeben möchten jede Zeile Leerzeichen aufgeteilt:
class Solution
def read_file
lines = []
File.foreach('test.txt') do |line|
words = []
line.strip.split(/\s+/).each do |word|
words << word
end
lines << Line.new(words)
end
lines
end
end
Der Schlüssel Linie Code ist hier: line.strip.split(/\s+/)
die ersten Streifen führenden und leerzeichen aus dem String nachlauf, dann auf ein Array wandelt durch die Zeichenfolge basierend auf Aufspalten leerzeichen (die /s+/
regulären Ausdruck übereinstimmt einem oder mehreren leerzeichen s).
Einige andere Vorschläge:
Geben Sie den Dateinamen als Argument an read_file
Sie eine Standard-Argument festlegen können, wenn Sie wollen:
class Solution
def read_file(filename = 'test.txt')
array = []
File.foreach(filename) do |line|
array << Line.new(line)
end
array
end
end
schließlich für eine viel elegantere Lösung, Sie kann map
verwenden und einfach .split
aufrufen, um ein verschachteltes Array zurückzugeben. Die Klasse Line
tut in diesem Fall nicht wirklich viel.
Dies wird einfach ein Array von Arrays zurückgeben, wobei das innere Array die Wörter für jede Zeile enthält.
Ruby gibt immer eines von zwei Dingen aus den Methoden zurück: Was Sie ihm mit dem Schlüsselwort 'return' sagen, oder wenn es den Wert des letzten Ausdrucks in der Methode erreicht. –
Auch Ihr Titel ist völlig anders als Ihre Frage. Ihre Frage ist eher wie "Warum gibt diese Methode null statt eines Arrays zurück?" –