2015-09-26 4 views
-2

Я просто играл вокруг w/Ruby и пытался создать функцию, но по какой-то причине он не работает так, как я думал. Не знаю, почему я с этой проблемой, но вот мой код:Неопределенный метод NoMethodError

class Script 
    print "Enter a number: " 
    number = gets 

    def random (temp) 
     puts "#{temp}" 
     puts "inside function" 
    end 

    random (number) 
end 

Ошибка:

Script.rb:13:in `<class:Script>': undefined method `random' for Script:Class (NoMethodError) 
from Script.rb:1:in `<main>' 
+2

Как вы так думаете? Я запускаю его и нет ошибки. – songyy

+0

wtf ... это так странно. Его все еще не работает, и я копировал весь свой код. – halapgos1

+0

Я действительно уверен, что он не работает. Повторите попытку. Я сомневаюсь, что он идет к фактической функции. – halapgos1

ответ

1

Проблема заключается в том, что вы определили метод random как метод экземпляра, но называют его на уровне класса. У вас есть два варианта, чтобы исправить это:

Сделать это метод класса (обратите внимание на self):

class Script 
    def self.random(temp) 
    puts "#{temp}" 
    puts "inside function" 
    end 

    print "Enter a number: " 
    number = gets 

    random(number) 
end 

или изменить метод для создания экземпляра первого (обратите внимание на new):

class Script 
    def random(temp) 
    puts "#{temp}" 
    puts "inside function" 
    end 

    print "Enter a number: " 
    number = gets 

    new.random(number) 
end 
+0

Прохладный, спасибо человеку за объяснение! Работал как шарм. :) – halapgos1

0

random является методом экземпляра, а не метод класса, так что ваш сценарий поднял NoMethodError, вы должны создайте объект класса Script, затем вызовите случайный метод.

class Script 
    print "Enter a number: " 
    number = gets 

    def random (temp) # it is a instance method. 
     puts "#{temp}" 
     puts "inside function" 
    end 

    Script.new.random(number) 
end 

или определен метод random как метод класса.

class Script 
    print "Enter a number: " 
    number = gets 

    def self.random (temp) # define random as a class method 
     puts "#{temp}" 
     puts "inside function" 
    end 

    random(number) 
end 
Смежные вопросы