Показать сообщение отдельно
  #14 (permalink)  
Старый 30.01.2010, 01:28
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
Хотя это уже, конечно, "предварительное" мнение
Ага, привычка к конкретной технологии, анализ через её призму. В Ruby же это описывается в доках, так что, для тех, кто изначально изучал Ruby - это не будет казаться чем-то странным.

С другой стороны, последний драфт стандарта по Ruby появился недавно (я не в курсе, вышла ли уже первая официальная версия), возможно, там что-то изменят, а пока все доки по руби - это исходники и доки на официальном сайте. Когда появится стандарт, можно будет однозначно говорить, как должно быть.

Сообщение от x-yuri
Как я понял, return в замыкании, созданном с помощью Proc.new завершает функцию, в которой было создано замыкание. И использовать его, за пределами этой функции смысла не имеет
Да, но это касается только ключевого слова return. Proc.new выходит из метода. Если вызвать Proc.new с "return" вне метода, будет ошибка - "неожиданный return".

fn = Proc.new {|x| return x}
fn.call 10 # ошибка

fn1 = Proc.new {|x| x}
fn1.call 10 # 10

def foo
  fn = Proc.new do |x| # альтернативная запись блока {...} == do...end
    return x
  end
  fn.call 10
  return 'сюда не дошли'
end

foo # 10


Есть ещё несколько случаев, когда return из Proc.new завершится с ошибкой (когда контекст уже мёртв, когда вызывается в другом треде, др.)

Вообще, можно выделить даже не 3, а целых 7 способов создать замыкания в Ruby (но они будут сводиться к 3-ём; остальные 4 - вариации/комбинации предыдущих).

Сообщение от x-yuri
может еще какие-нибудь примеры использования Proc.new есть? Т.е. на данный момент я вижу, что это можно использовать для поиска первого элемента
Ну, не первого, а любого/группы (и не обязательно поиска). Придумай другие примеры

Я рассказываю, как есть (не привязываясь к ES, либо к другой технологии) - на твою фразу, что "не надо этого хотеть". Иногда это удобно, но в ES такой возможности нет.

Нравится тебе это или нет, хочешь ли ты от этого отгородиться или нет, решил ли ты для себя, что это нужно/не нужно: это есть (в некоторых языках) и разработано с конкретной целью
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 30.01.2010 в 12:23.
Ответить с цитированием