Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синтаксис языка Ruby, extends, непонятные моменты 
:(
    Опции темы
fell
Дата 29.7.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




module Dep
  extend self
  some methods here
   class Some
      def hello; p 'hello';end
   end
end
что делает эта конструкция ? extend вообще добавляет из модуля методы. 
и делает их классовыми( модульными) методами. self  у нас тут Dep, extend Dep получается ?
А тут что ?

PM MAIL WWW   Вверх
source777
Дата 31.7.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(fell @  29.7.2010,  10:01 Найти цитируемый пост)
что делает эта конструкция ?

Она делает методы экземпляра доступными для вызова как методы модуля.

Код

module Dep
  extend self
  
  def some_method(*args)
    # do something
  end
end


Благодаря extend self, можно вызывать метод так:
Dep.some_method(...)


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


Новичок



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

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



а почему не писать 
def self.method
end
?
опять для простоты ? module << self не сработает ?
PM MAIL WWW   Вверх
source777
Дата 2.8.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(fell @  31.7.2010,  19:14 Найти цитируемый пост)
а почему не писать 
def self.method
end
?

Ну так это же будет далеко не то же самое...
Например, Array.send :include, Dep
будет примешивать к классу Array методы экземпляра, т.е. Array.new.some_method

А вообще попробуй поэкспериментировать сам: запусти irb и вперёд - пробовать разные варианты и на собственном опыте познавать их отличия. Это самый эффективный способ разобраться и запомнить отличия.

Это сообщение отредактировал(а) source777 - 2.8.2010, 14:41


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

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

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


 




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


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

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