Почему я не могу вызвать метод? - PullRequest
0 голосов
/ 10 марта 2011

Так что я подумал, что научусь немного Руби. Я играл с переводчиком, но я хотел делать больше программ, поэтому я скачал Aptana, IDE. Когда я пытаюсь запустить этот код:

class HelloWorld
    def h
        puts "hello World!"
    end
    h
end

Это дает мне ошибку, которая говорит, что h - неопределенная локальная переменная. Когда я набираю команды в интерпретаторе (без начала и конца класса), он вызывает h так, как я хочу.

Я в растерянности здесь. что происходит?

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

При определении класса вы определяете методы instance. Это означает, что вы бы назвали их так:

class HelloWorld
  def h
    puts "hello world!"
  end
end

instance = HelloWorld.new
instance.h

Ruby жалуется, что ваш метод не существует, поскольку при определении тела класса все вызовы функций выполняются для class методов (или singleton методов).

Если бы вы действительно хотели это сделать, вы бы сделали это так:

* * 1010
0 голосов
/ 10 марта 2011

Попробуйте это

class HelloWorld
  def self.h
    puts "hello World!"
  end
  h # you can only call h like this if it is defined as a class method above
end

HelloWorld.h # you can call the class method like this also

Вам нужно определить h как метод класса, чтобы вызывать его вот так.В качестве альтернативы, вы можете сделать это

class HelloWorld
  def h
    puts "hello World!"
  end
end

a = HelloWorld.new # instantiate a new instance of HelloWorld
a.h

Удачи!

0 голосов
/ 10 марта 2011

Ваша проблема в том, что вы отправили сообщение h в области действия class.(Я уверен, что некоторые люди с большим опытом работы с Ruby захотят исправить мою формулировку здесь; также, если я полностью ошибаюсь, примите мои извинения.)

Вы можете отправить h из другого метода экземпляра наHelloWorld:

class HelloWorld
  def h; puts "hello world!"; end

  def g
    h
  end
end

HelloWorld.new.g
# => "hello world!"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...