Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > видимость методов в модуле


Автор: baleogg 3.12.2010, 11:35
Доброго дня.
создаю файл с таким содержимым (модуль с одним методом)
файл lib/num.rb
Код

module Num
  def self.abc(a)
    return a
  end
end

в тесте пытаюсь вызывать метод из описанного выше модуля
файл test/test.rb
Код

require 'test/unit'
require 'lib/num'

module NumTest
  include Num
  class DescribeTest < Test::Unit::TestCase
    def test_dummy
      a = abc([0,1,2]) # так ошибка  undefined method `abc`. почему??
      b = Num::abc([0,1,2]) # а так ошибки нет

но, несмотря на то, что я включаю модуль с помощью include, к методу из Num получается обращаться только явно указав путь. Подскажите, где я ошибся?

заранее спасибо

Автор: GrayCardinal 5.12.2010, 13:03
Попробуйте из
def self.abc(a)
"self." убрать. На сколько знаю self. пишут только в классах.

Автор: source777 5.12.2010, 23:44
Цитата(GrayCardinal @  5.12.2010,  13:03 Найти цитируемый пост)
На сколько знаю self. пишут только в классах.

неправда


Цитата(baleogg @  3.12.2010,  11:35 Найти цитируемый пост)
Подскажите, где я ошибся?

Знать бы, для начала, что ты хотел сделать... 
Но ожидать, что метод класса, определённый в модуле, будет можно вызывать как метод экземпляра для класса, к которому этот модуль даже не примешивается - весьма и весьма странно.

Автор: GrayCardinal 7.12.2010, 12:29
source777, 
А зачем в модулях self ? Или это влияет когда к классу мешаешь ?

Автор: source777 7.12.2010, 19:22
Цитата(GrayCardinal @  7.12.2010,  12:29 Найти цитируемый пост)
А зачем в модулях self ? Или это влияет когда к классу мешаешь ? 

И когда примешиваешь влияет и в принципе если надо некоторый метод прямо из модуля вызывать... В общем self в модулях затем же самым зачем и в классах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)