Ruby Goldへの道 day13
以下のサイトでruby gold取得に向けて毎日一回Goldチャレンジを行い間違えた問題を簡単にまとめる。 rex.libertyfish.co.jp
13日目 得点 72点/100点中
- 継承
- moduleの中でクラスを定義すると
モジュール::クラス
となる - そのクラスを継承すると
モジュール::クラス
を継承したことになる
class Base def name p 'Base#name' end end module Scope class Base def name p 'Scope::Base#name' end end class Inherited < Base # Scope::Baseとして解釈される def name p 'Scope::Inherited#name' super end p self.ancestors # [Scope::Inherited, Scope::Base, Object, Kernel, BasicObject] end end inherited = Scope::Inherited.new inherited.name #=> "Scope::Inherited#name" #=> "Scope::Base#name"
- attr_reader
- インスタンス変数の読み取りメソッドを省略したもの
nameメソッドを上書きするのは理解できるが@name
とoriginal_name
が等しいのがわからん
alias_methodはインスタンス変数も上書きするのか?
class Human attr_reader :name alias_method :original_name, :name # attr_readerを書かない場合、インスタンス変数nameの読み取りメソッドが必要 # def name # @name # end def name puts @name == original_name # true ..?? "Mr. " + original_name end def initialize(name) @name = name end end human = Human.new("Andrew") puts human.name #=> Mr. Andrew
- singletonモジュール
- インクルードするとクラスメソッド
instance
を定義する - instanceメソッドを呼び出すとインスタンスを一つだけ返す
- インクルードするとクラスメソッド
ずっとインクルードしたらsingleton
メソッドが使えるようになると思ってた。。。
require 'singleton' class Message include Singleton def morning 'Hi, good morning!' end end p Message.instance.morning #=> "Hi, good morning!"