Поиск:

Ответ в темуСоздание новой темы Создание опроса
> blocks, синтаксис и семантика 
V
    Опции темы
kemiisto
Дата 22.2.2011, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 1
Всего: 160



Привет!

Читаю 7 Languages in 7 Weeks. Там в качестве первого языка Ruby. Я что-то никак не могу понять кое-что про blocks (блоки по-русски али как?).

Есть такой код:
Код

class Tree
  attr_accessor :children, :node_name
  
  def initialize(name, children=[])
    @children = children
    @node_name = name
  end
  
  def visit_all(&block)
    visit &block
    children.each {|c| c.visit_all &block}
  end
  
  def visit(&block)
    block.call self
  end
end
  
ruby_tree = Tree.new( "Ruby",
  [Tree.new("Reia"),
   Tree.new("MacRuby")] )

puts "Visiting a node"
ruby_tree.visit {|node| puts node.node_name}
puts

puts "visiting entire tree"
ruby_tree.visit_all {|node| puts node.node_name}


Метод visit_all понятно что совершает рекурсивный обход древа. А вот почему параметр-блок именуется с символом & в начале? Причём этот символ, вроде, часть идентификатора. Это конвенция такая что-ли, что имена блоков с & начинаются?

Ну и собственно по механизму работу метода call. Я правильно понимаю, что те параметры, которые стоят после call будет переданы в блок в качестве параметров этого самого блока? Меня смущает фраза из RDoc:
Цитата
prc.call(params,...) => obj
prc[params,...] => obj

Invokes the block, setting the block‘s parameters to the values in params using something close to method calling semantics.

Что тут значит "something close"?

Это сообщение отредактировал(а) kemiisto - 22.2.2011, 02:50


--------------------
PM MAIL WWW GTalk Jabber   Вверх
source777
Дата 22.2.2011, 17:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(kemiisto @  22.2.2011,  02:49 Найти цитируемый пост)
Это конвенция такая что-ли, что имена блоков с & начинаются?

да

Цитата(kemiisto @  22.2.2011,  02:49 Найти цитируемый пост)
Что тут значит "something close"?

значит, что блок похож на анонимную функцию, но при этом это не совсем то же самое что лямбда.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Goganchic
Дата 9.4.2011, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 678
Регистрация: 18.6.2004

Репутация: нет
Всего: 5



вот хорошая статейка про block, lambda и proc http://www.robertsosinski.com/2008/12/21/u...cs-and-lambdas/
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0989 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.