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
Как правило, каждый метод может работать (работать) по-разному с блоком или без блока. Это всегда должно быть указано в документации по методу.