ruby aliasの使い方
gold対策(模擬試験12)。
この手の問題も間違った気がする。
alias式
aliasは式なので、識別子、symbolが利用できます。
下記出力となるようにaliasの内容を回答させる問題。
メソッド名が引っ掛けですが、先に指定するのが新しいメソッド名です。
Hello, World Hello, Ruby World
識別子指定の場合。
def method puts 'Hello, World' end alias old_method method def method old_method puts 'Hello, Ruby World' end method
Symbol指定の場合。
def method puts 'Hello, World' end alias :old_method :method def method old_method puts 'Hello, Ruby World' end method
文字列を指定するとエラーになります。
alias_ng_string.rb:5: syntax error, unexpected tSTRING_BEG alias 'old_method' 'method' ^
本筋から離れますが、tSTRING_BEG ってなんでしょう?聞き慣れないですね。
ググると、parse.y が引っかかるので、その筋の定義のようです。
第10章 パーサ
alias_method
こちらもundefと一緒で引数に指定できるのは、Symbolと文字列です。 aliasとの違いはグローバル変数の別名をつけることはできないことだそうです。 new_methodという名前で別名を付ける例。 Symbol指定の場合。
class C def method puts 'Hello, World' end alias_method :new_method, :method def new_method method puts 'Hello, Ruby World' end end C.new.new_method # >> Hello, World # >> Hello, Ruby World
文字列指定の場合。
class C def method puts 'Hello, World' end alias_method 'new_method', 'method' def new_method method puts 'Hello, Ruby World' end end C.new.new_method # >> Hello, World # >> Hello, Ruby World