2016-10-15 1 views
1

こんにちは、私はそれが書かれたようにしましたが、エクササイズ18ではエラーです。私はこのエラーを理解しないRubyエクササイズ18未定義のメソッドですが、私はメソッドを定義しました

exercise18_names_variables_code_functions.rb:25:in `<class:Exercise18_NamesVariablesCodeFunctions>': undefined method `print_two' for Exercise18_NamesVariablesCodeFunctions:Class (NoMethodError) 
Did you mean? print 
    from exercise18_names_variables_code_functions.rb:1:in `<top (required)>' 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

class Exercise18_NamesVariablesCodeFunctions 

# this one is like your scripts with ARGV 
def print_two(*args) 
    arg1, arg2 = args 
    puts "arg1: #{arg1}, arg2: #{arg2}" 
end 

# ok, that *args is actually pointless, we can just do this 
def print_two_again(arg1, arg2) 
    puts "arg1: #{arg1}, arg2: #{arg2}" 
end 

# this just takes one argument 
def print_one(arg1) 
    puts "arg1: #{arg1}" 
end 

# this one takes no arguments 
def print_none() 
    puts "I got nothin'." 
end 


print_two("Zed","Shaw") 
print_two_again("Zed","Shaw") 
print_one("First!") 
print_none() 

end 

は、ここに私のエラーです。私はすべての方法を定義しました。私は自分を追加するとき。すべてのメソッドに作用します。

答えて

3

なぜなら、クラス内部からのメソッド呼び出しはクラスメソッドを呼び出すからです。なぜなら、定義したすべてのメソッドはインスタンスメソッドです。

コードが現在書かれているので、クラスのインスタンスを定義した後にこれらのメソッドを呼び出すことができます。

練習問題は、クラス自体のインスタンスであるため、そのクラスのインスタンスメソッドにアクセスできます。

あなたが現在持っているようにメソッドを呼び出したい場合は、クラスメソッドにそれらのメソッドを変更する必要がありますが、単に各機能

def self.print_two(*args) 
    arg1, arg2 = args 
    puts "arg1: #{arg1}, arg2: #{arg2}" 
end 

の名前の前にself.を追加し、次のことができるようになりますそのメソッドをクラスの中から呼び出します。

また、すべてのクラスメソッドをコンテナにラップすることもできます。

class Test 
    class << self 
    def first_method 
    end 

    def second_method 
    end 
    end 
end 

ここで、class << selfの中のどのメソッドもクラスメソッドです。

+0

ありがとうございました。今分かります。 – AlaskaStack

0

お試しください。

class Exercise18_NamesVariablesCodeFunctions 

# this one is like your scripts with ARGV 
def print_two(*args) 
    arg1, arg2 = args 
    puts "arg1: #{arg1}, arg2: #{arg2}" 
end 

# ok, that *args is actually pointless, we can just do this 
def print_two_again(arg1, arg2) 
    puts "arg1: #{arg1}, arg2: #{arg2}" 
end 

# this just takes one argument 
def print_one(arg1) 
    puts "arg1: #{arg1}" 
end 

# this one takes no arguments 
def print_none() 
    puts "I got nothin'." 
end 

a = Exercise18_NamesVariablesCodeFunctions.new 

a.print_two("Zed","Shaw") 
a.print_two_again("Zed","Shaw") 
a.print_one("First!") 
a.print_none() 

end 
関連する問題