2010-01-06 13 views

Respuesta

18

Puede eliminar las cinco primeras líneas por completo.

De Pico

$<: An object that provides access to the concatenation of the contents of all the files given as command-line arguments or $stdin (in the case where there are no arguments). $< supports methods similar to a File object: binmode, close, closed?, each, each_byte, each_line, eof, eof?, file, filename, fileno, getc, gets, lineno, lineno=, path, pos, pos=, read, readchar, readline, readlines, rewind, seek, skip, tell, to_a, to_i, to_io, to_s, along with the methods in Enumerable. The method file returns a File object for the file currently being read. This may change as $< reads through the files on the command line. [r/o]

Por lo tanto:

print $<.read 

Kernel.gets es la abreviatura de $ < .gets, por lo que:

while s = gets 
    puts s 
end 
+2

Además, puede usar 'ARGF', ya que es un alias de' $ <'. – kejadlen

+0

Sí, eso funciona estupendamente, me hace preguntarme por qué di la vuelta en círculos la primera vez para captar esto. Creo que es posiblemente debido al comportamiento un tanto extraño (pero bueno) que si ejecutas 'ruby myscript.rb' sin argumentos, que el script simplemente acaba de salir, la mayoría de los programas (certeramente en Unix por ejemplo) se sentarán y esperarán stdin: así que supongo que asumí que tenía que implementar algo ahí, pero de hecho (gracias por la descripción) el intérprete de Ruby hace algo bastante útil y muy inteligente (como siempre) allí! Gracias. – monojohnny

+0

Estoy allí contigo. Todavía me estoy acostumbrando (y descubriendo) a todos estos pequeños trucos de Ruby. –

2

then y ; son opcionales

También se puede utilizar el operador ternario:

input = ARGV[0].nil? ? $< : File.new(ARGV[0],"r") 
+0

Gran - 1 - pero votaron el otra respuesta, ya que es aún más corta! ¡Buena vieja Ruby! – monojohnny

3

Sólo ARGV ? funciona para mí, "r" normalmente por defecto por lo que puede saltar, y File.new() pueden ser iguales a File(), entonces

input = ARGV ? $< : File.new(ARGV[0]) 
+0

como este: ¡gracias! – monojohnny

+0

+1, genial No sabía acerca de File() :) – makevoid

+0

El archivo ("foo") ya no parece funcionar (ruby 2.3.1): NoMethodError: método indefinido 'File 'for main: Object. –

Cuestiones relacionadas