DarkDust уже сказал, что эти методы разные. Я объясню вам блоки немного больше, так как я полагаю, что могу догадаться, почему вы задали этот вопрос: -)
Блок в ruby - это просто параметр для некоторого метода. Это не просто другой синтаксис.
Методы, которые принимают (необязательные) блоки, обычно имеют условие для проверки того, были ли они вызваны с помощью блока или без него.
Рассмотрим этот очень упрощенный пример: (реальный File.open аналогичен, но гарантирует, что файл закрыт, даже если ваш блок вызывает ошибку, например)
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
В общем, каждый метод может работать (работает) по-разному с блоком или без блока. Он должен всегда указываться в документации по методу.
Ответ 2
Нет, они не означают то же самое. В первом примере файл автоматически закрывается после обработки блока. Во втором примере ваша ответственность - вручную вызвать newFile.close.