DarkDust ya dijo que estos métodos son diferentes. Te explicaré los bloques un poco más, ya que supongo que puedo adivinar por qué hiciste esta pregunta ;-)
El bloque en ruby es solo un parámetro para algún método. No es solo una sintaxis diferente.
Los métodos que aceptan bloques (opcionales) suelen tener una condición para comprobar si se han llamado con bloqueo o sin ellos.
Considere este ejemplo muy simplificado: (el verdadero File.open es similar, pero asegura que el archivo se cierra incluso si su bloque genera un error, por ejemplo)
def open(fname)
self.do_open(fname)
if block_given?
yield(self) # This will 'run' the block with given parameter
self.close
else
return self # This will just return some value
end
end
En general, cada método puede trabaja (trabaja) de manera diferente con un bloque o sin un bloque. Debe indicarse siempre en la documentación del método.
No creo que importe tanto, pero es mucho más común escribir métodos de clase como 'File.open' en lugar de' File :: open'. – Telemachus
'código 2' no cerrará el archivo automáticamente, como lo hace' code 1'. Por lo tanto, tendrá que hacer 'newFile.close'. –