2017-06-27 6 views
4

Ich war mein Freund Code analysiert, und ich sah diesen kleinen Schnipsel:

n,a=*$< 

ich kann nicht herausfinden, was es bedeutet - ich auf vielen Websites gesucht habe, aber sie scheinen nicht zu erkennen, die spezielle Charaktere.

+2

'$ <' ist ARGF und '*' ist Splat. – radubogdan

+0

Was bedeutet ARGF? – Ivy

+1

Überprüfen Sie auch https://StackOverflow.com/a/3747135/846163 und führen Sie das Snippet innerhalb von irb aus. Der Code nimmt die Eingabe von STDIN und nimmt die ersten zwei Zeilen in "n" und "a". – sschmeck

Antwort

4

$< ist ARGF. Aus der Ruby-Standarddokumentation:

ARGF ist ein Stream für die Verwendung in Skripten, die Dateien verarbeiten, die als Befehlszeilenargumente übergeben oder über STDIN übergeben werden.

Eine super gute Erklärung here

* ist Splat-Operator.

Sie weisen a und n zu, was an diesem Punkt in ARGF/STDIN ist.

Beispiel:

[email protected] ~$ cat a.txt           
a 
b 
c 

[email protected] ~$ cat a.rb           
a, n = *$< 
puts "a is: #{a}" 
puts "n is: #{n}" 

[email protected] ~$ ruby a.rb a.txt         
a is: a 
n is: b 
+2

Genauer gesagt ruft '*' 'ARGF # to_a' auf, was ein Alias ​​für [ARGF # readlines'] ist (http://ruby-doc.org/core-2.4.1/ARGF.html#method-i- readlines), also 'n, a = * $ <' ist äquivalent zu 'n, a = ARGF.readlines' – Stefan