2015-07-17 3 views
-1

Я строю довольно простой Module :: Class с методом инициализации.инициализировать метод с аргументом не распознает аргумент

module Encryption 
    class Caesar 

    def initalize(number) 
     @caesar_number = number 
    end 
    end 
end 

когда я бегу Encryption::Caesar.new(2) я получаю следующее сообщение об ошибке:

ArgumentError: wrong number of arguments (1 for 0) 
    from (irb):32:in `initialize' 
    from (irb):32:in `new' 
    from (irb):32 
    from /Users/yedidyaweiner/.rvm/rubies/ruby-2.1.3/bin/irb:11:in `<main> 

Если я бегу Encryption::Caesar.new, он успешно создает новый экземпляр класса.

Почему ошибка говорит о том, что она не ожидает аргумента, если она определена в методе initialize?

+0

потому что вы создаете новый экземпляр класса Цезарь, но не вызываете действие инициализации. вам нужно будет перейти на Encryption :: Caesar.initialize (2) – smoggers

+1

Initalize? Купите 'i' :) –

+0

@smoggers: 'Encryption :: Caesar.initialize (2)' будет вызывать 'private method 'инициализировать' called' error. – orde

ответ

3

initalize - орфографическая ошибка; он должен быть initialize.

module Encryption 
    class Caesar 
    def initialize(number) 
     @caesar_number = number 
    end 
    end 
end 

foo = Encryption::Caesar.new(2) 
foo.inspect #=> #<Encryption::Caesar:0x1e05580 @caesar_number=2> 
Смежные вопросы