Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Метод File.open принимает блок. Он открывает новый файл (в режиме «append») и выдает открытый файл в блок. Когда блок заканчивает работу, Ruby закрывает файл. Кроме этого, Ruby не просто закрывает файл, когда блок<.strong> завершается, он гарантирует, что File будет закрыт, даже если выполнение блока завершается исключением
и вот из-за таких мелочей как повторяемые слова, статью сложно дочитать до конца =(
Метод File.open принимает блок. Он открывает новый файл (в режиме «append») и выдает открытый файл в блок. Когда блок заканчивает работу, Ruby закрывает файл. Кроме этого, Ruby не просто закрывает файл, когда блок завершается, он гарантирует, что File будет закрыт, даже если выполнение блока завершается исключением
format.html { redirect_to(person_path(@people.first)) and return }), скопированное из какого-то блога, но как оно устроено внутри мало кто сможет объяснить — работает себе, что еще надо?# myapp.rb
require 'rubygems'
require 'sinatra'
get '/' do
'Hello world!'
endget '/hello/:name' do
# matches "GET /hello/foo" and "GET /hello/bar"
# params[:name] is 'foo' or 'bar'
"Hello #{params[:name]}!"
end
@expose('/display/<uid>')
def display(request, uid):
url = URL.query.get(uid)
if not url:
raise NotFound()
return render_template('display.html', url=url)
get '/hello/:name' do
"Hello #{params[:name]}!"
end
with get('/hello/:name'):
"Hello %s!" % params[:name]
super вызвавшей их функции;returnsuperyield.{} или do...end. Proc.new и lambda такое не позволят.Colin Curtin:и дальше. Т.е. в моем понимании нельзя написать оторванный от контекста Proc или lambda с директивами super, return или yield и надеяться, что он будет работать. Нужен контекст для этих super, return или yield.
Кое-что, о чем нужно помнить про non-local-return: блок должен иметь доступ к контексту, из которого вы хотите вернуться.
respond_to, простую реализацию синхронизации мютексовdef a
yield
end
a{ return 0 } # => LocalJumpError: unexpected returndef a
yield 10
end
a {|n| n + 10 } # 20
Строительные блоки Ruby