DarkDust sagte bereits, dass diese Methoden unterschiedlich sind. Ich erkläre dir die Blöcke ein wenig mehr, da ich vermute, dass du diese Frage stellst ;-)
Der Block in Ruby ist nur ein Parameter für irgendeine Methode. Es ist nicht nur eine andere Syntax.
Methoden, die (optionale) Blöcke akzeptieren, müssen normalerweise prüfen, ob sie mit oder ohne Block aufgerufen wurden.
dieses sehr vereinfachtes Beispiel vor: (der wirkliche File.open ist ähnlich, aber es sorgt für die Datei auch geschlossen, wenn Ihr Block einen Fehler auslöst, zum Beispiel)
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
Im Allgemeinen jede Methode kann arbeitet (arbeitet) anders mit einem Block oder ohne Block. Es sollte immer in der Methodendokumentation angegeben werden.
Ich glaube nicht, dass es so wichtig ist, aber es ist weit üblicher, Klassenmethoden als 'File.open' statt als' File :: open' zu schreiben. – Telemachus
'code 2' wird die Datei nicht automatisch schließen, wie' code 1' dies tut. Sie müssen also 'newFile.close' eingeben. –