Мне кажется странным создавать объект, вызывая «new», но в определении класса инициализатор называется «initialize».Я попытался сделать его непротиворечивым (чтобы его называли «новым» как в определении класса, так и за его пределами), поэтому я попробовал приведенный ниже код, используя alias_method:
class Class
alias_method :initialize :new
end
class Foo
def new
puts "bar"
end
end
f = Foo.new
Я думал, когда я псевдоним new
как initialize
, он будет вызывать initialize
, а initialize
- псевдоним new
, поэтому он будет вызывать new
.Но это не работает, и выдает ошибки:
SyntaxError: test.rb:2: syntax error, unexpected ':'
alias_method :initialize :new
^
Видимо new
является ключевым словом и не может быть псевдонимом.Но как обходится?
Обновление:
Извините, я пропустил запятую в alias_method
После добавления запятой сценарий запускается без ошибок.Но он не выводит «bar», поэтому новый метод не вызывается.Я не уверен, почему это не будет работать, как комментарии ниже ...