【Ruby】同名クラスの別メソッドを呼び出すTips

Railsのコードを書いているときにぶつかった問題の一つと、その解決策を紹介します。

それは以下のようなコードがあったとして、Sample::Example#greetingから、他の箇所で定義された同名クラスExampleのsay_goodbyeを呼び出したい時、以下の書き方ではNoMethodErrorが発生することです。

module Sample  class Example class << selfdef say_hello  puts "hello!" enddef greeting  Example.say_goodbye  # undefined method `say_goodbye' for Sample::Example:Classend end  endendclass Example  class << self def say_goodbyeputs "goodbye!" end  endend

そう、Sample::Exampleクラスのクラスメソッドとして、say_goodbyeを呼び出そうとしてしまっているんですね。

ではどうするか。

以下のように書くことで解決できました。

module Sample  class Example class << selfdef say_hello  puts "hello!" enddef greeting  ::Example.say_goodbye  # "goodbye!"end end  endendclass Example  class << self def say_goodbyeputs "goodbye!" end  endend

クラス名の前に`::`演算子を付けることで、トップレベルにあるExampleクラスを呼び出してくれました。

目次

参考

https://spirits.appirits.com/doruby/12105/?cn-reloaded=1

最新情報をチェックしよう!