2016-11-08 27 views
0

Ich hielt zu diesem unerwarteten Fehler-Token ausgeführt wird. Ich wollte das Programm ohne Rubin Aufruf auszuführen. Für Fälle, statt ruby program1.rb, ich sollte program1.rb poem.txt der Lage sein.Syntaxfehler unerwartetes Token ‚(‘

Dies ist Fehlermeldung:

program1.rb --backwards poem.txt 
./program1.rb: line 1: syntax error near unexpected token `(' 
./program1.rb: line 1: `def backlines(line_array)' 

Dies ist mein Code:

def backlines(*line_array) 

end 

def backwards(line_array) 

end 

def backchars(line_array) 

end 

def main 
    file = File.new(ARGV[1], "r") do |file| 
    line_array = file.readlines 
    *line_array = line_array.reverse 
    if ARGV[0] == "--backlines" 
    *backwards_poem = backlines(line-array) 
    #you can manipulate "backwards_poem" however you want 
    elsif ARGV[0] == "--backwards" 
    backwards(line_array) 
    elsif ARGV[0] == "--backchars" 
    backchars(line_Array) 
    end 

    # passing a *line_array into a function 
end 

main 
+0

Sie führen diese Datei über die Befehlszeile aus, ohne sie an 'ruby' zu übergeben? Klingt dann, als ob du einen Shebang brauchst http://stackoverflow.com/questions/10376206/what-is-the-preferred-bash-shebang –

+2

dir fehlt ein 'end' in der Hauptmethode – usha

+0

Es ist nicht nötig' 'line_array zu tun = ', das ist ein Anti-Pattern. Verwenden Sie einfach 'line_array ='. Ebenso, definieren Sie nicht eine "Haupt" -Methode, das ist sinnlos. Es versteht sich, dass Ruby nie so etwas hat und diese Konventionen. Sie sollten auch [OptionParser] (http://ruby-doc.org/stdlib-2.3.1/libdoc/optparse/rdoc/OptionParser.html) verwenden, um Befehlszeilenargumente zu verarbeiten. – tadman

Antwort

1

Haben Sie ruby in Ihrem Skript an der Spitze ausgeführt e? g:

#!/usr/bin/ruby 
+0

Ich habe versucht, aber ich habe einen Syntaxfehler, unerwartete Ende der Eingabe, erwartet Keyword_end :( – moon

+2

"Ich habe versucht, aber ich habe einen Syntaxfehler , unerwarteter End-of-Input, erwartet Keyword_end "Und zu Recht! Sie _verpassen _ ein Schlüsselwort' end'. Dies beweist, dass das Setzen der Shebang-Zeile an der Spitze bewirkt, dass Ihr Skript _correctly_! Es wird als Rubin und Rubin geparst Parser gibt Ihnen etwas, was Sie beheben müssen. – matt

+0

Ich habe die Shebang-Zeile an der Spitze, keine Fehler zurückgegeben, aber auch gab es keine Ausgabe – moon

0
#!/usr/bin/ruby 

def backlines(*line_array) 

end 

def backwards(line_array) 

end 

def backchars(line_array) 

end 

def main 
    puts ARGV 
    # File open not new ... this block requires the end below. 
    File.open(ARGV[1], "r") do |file| 
    line_array = file.readlines 
    *line_array = line_array.reverse 
    if ARGV[0] == "--backlines" 
     *backwards_poem = backlines(line_array) 
     #you can manipulate "backwards_poem" however you want 
    elsif ARGV[0] == "--backwards" 
     backwards(line_array) 
    elsif ARGV[0] == "--backchars" 
     backchars(line_array) 
    end 
    end 
    # passing a *line_array into a function 
end 

dies sollten Sie beginnen, wenn Ihr Anruf es wie ./program1.rb --backwards file

Sie auch Line-Array hatte, line_array und line_Array die al eine Variable ich denke, sein sollte.

+0

Danke, ich denke, der Code hat funktioniert, aber es hat keine Ausgabe zurückgegeben. Das poem.txt, das ich getestet habe, enthält drei Zeilen. – moon

+0

müssen Sie etwas in Ihren Funktionen tun.?! @ guest12 – corn3lius

+0

Wenn ich ./program1.rb --backwards poem.txt ausführe, sollte es Ausgabe von allen Linien in der poem.txt nach hinten zurückgeben – moon

Verwandte Themen