質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

4260閲覧

aliasとalias_method、どちらを使うのがいい?(クラス宣言で書く場合)

maisumakun

総合スコア145121

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

2クリップ

投稿2017/05/24 07:48

Rubyには同じメソッドに別名を付ける方法として、aliasalias_methodの2つがあります。

  • alias…グローバル変数に別名を付けられる、構文なので文字列やシンボルだけでなく生のトークンでも書ける
  • alias_method…メソッドなので、実行するコンテキストや引数を動的に変えられる

と、それぞれに特徴があります。では、どちらでも同じ動作をするであろう場面、典型的には「クラス宣言の内側に、固定の引数で直接書く場合」はどちらを使えばいいのでしょうか(もし、この状況で違う動作をさせられるのであれば、その例を示していただければ幸いです)。

ruby

1class SomeClass < Parent 2 # この2つの使い分け 3 alias foo bar 4 alias_method :foo, :bar 5end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

回答と呼べるほどのものではなく単なるとんち的なものかも知れませんが、alias_methodの方はメソッドなのでデバッグ目的などで再定義する余地があるという点が使いどころになるかも知れないと思いました。

barメソッドに別名を付ける意図でalias_methodを用いようとして実はtypoによりグローバル(?)な定義のbarを参照してしまっていたいったバグが見つかった・・・というちょっとこじつけっぽい例ですが。

ruby

1# test.rb 2class Module 3 alias_method :org_alias_method, :alias_method 4 5 def alias_method(to, from) 6 if ! method_defined?(from) then 7 puts "alias_method: " + from.to_s + " is not defined in " + self.to_s 8 else 9 org_alias_method to, from 10 end 11 end 12end 13 14def bar 15 "global bar" 16end 17 18class Parent 19 def bar_typo # <---- typo 20 "parent bar" 21 end 22end 23 24class SomeClass < Parent 25 alias_method :foo, :bar 26 27 def baz 28 foo 29 end 30 31 def bar 32 "child bar" 33 end 34end 35 36p SomeClass.new.baz 37 38===> 39$ ruby test.rb 40alias_method: bar is not defined in SomeClass 41test.rb:27:in `baz': undefined local variable or method `foo' for #<SomeClass:0x000006002a9ad0> (NameError) 42Did you mean? fork 43 from test.rb:35:in `<main>'

rubyのプログラミングスタイルや言語仕様に暗いのでトンチンカンなことを言ってしまっているかも知れませ。その際はご容赦ください。

投稿2017/06/01 23:23

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問