ruby class継承

https://qiita.com/go8/items/db936ff7312ba7d97315

このサイトを参考に試してみる

先ほどの続き、次は継承を試してみる

ファイル名:practice_main.rb

require './practice'
require './inheritance'

Haha.lala
Haha.new.mama

ファイル名:practice.rb

class Haha
  class << self
    def lala
      puts "クラスタンスメソッド"
    end
  end

  def mama
    puts "インスタンスメソッド"
  end

ファイル名:inheitance.rb

class Inheritance < Practice

end

こうコードを書いた

 

動かない...

 

なんでだろうと思い

 

ファイル名:inheitance.rb

class Inheritance < Haha

end

こう変更してみた

 

$ ruby practice_main.rb

クラスタンスメソッド

インスタンスメソッド

 

無事動いた!!

どうやらファイル名は関係ないらしい

全てクラス名を参照するっぽい

ruby class継承

https://qiita.com/go8/items/db936ff7312ba7d97315

このサイトを参考に試してみる

先ほどの続き、次は継承を試してみる

ファイル名:practice_main.rb

require './practice'
require './inheritance'

Haha.lala
Haha.new.mama

ファイル名:practice.rb

class Haha
  class << self
    def lala
      puts "クラスタンスメソッド"
    end
  end

  def mama
    puts "インスタンスメソッド"
  end

ファイル名:inheitance.rb

class Inheritance < Practice

end

こうコードを書いた

 

動かない...

 

なんでだろうと思い

 

ファイル名:inheitance.rb

class Inheritance < Haha

end

こう変更してみた

 

$ ruby practice_main.rb

クラスタンスメソッド

インスタンスメソッド

 

無事動いた!!

どうやらファイル名は関係ないらしい

全てクラス名を参照するっぽい

requireメソッド

https://qiita.com/go8/items/db936ff7312ba7d97315

このサイトを参考に試してみる

まずrequireから

ファイル名:practice_class.rb

class Haha
  class << self
    def lala
      puts "クラスタンスメソッド"
    end
  end

  def mama
    puts "インスタンスメソッド"
  end
end

ファイル名:practice_main.rb

require './practice_class'

Haha.lala
Haha.new.mama

こうコードを入力したところ

$ ruby practice_main.rb

クラスタンスメソッド

インスタンスメソッド

 

動いた。

class << selfについて 

https://magazine.rubyist.net/articles/0046/0046-SingletonClassForBeginners.html

このサイトによると

class << self と書いた行から end までの間に def class_method のようにクラス名を書かずにインスタンスメソッドと同じようなメソッド定義を書いていきます。この間に書いたものはクラスメソッドとして定義されます。

という記述があったので試してみる

class Haha
  class << self
    def lala
      puts "クラスメソッドになってる"
    end
  end
end

Haha.lala

このようにコードを書いたら

$ ruby practice.rb

クラスメソッドになってる

 

こう出力された

ちゃんとselfをつけずともclassメソッドになってる

一方で

class Haha
  class << self
    def lala
      puts "クラスメソッドになってる"
    end
  end
end

Haha.new.lala

こうコードを書くとエラー

 

完全にクラスメソッドになっているから、インスタンスメソッドとしての呼び出しは無理っぽい

ruby クラスメソッドとインスタンスメソッド

https://qiita.com/hogeta_/items/27221675638cdc9bde6b

この記事を参考にしてやってみる

class Haha
  def lala
    puts "インスタンスメソッド"
  end

  def self.mama
    puts "これはクラスメソッド"
  end

  begin
    lala
  rescue
    puts "呼び出し失敗"
  end

  begin
    mama
  rescue
    puts "呼び出し失敗"
  end

end

begin
  Haha.new.lala
rescue
  puts "呼び出し失敗"
end

begin
  Haha.mama
rescue
  puts "呼び出し失敗"
end

こんな感じでコードを打ったところ

$ ruby practice.rb

呼び出し失敗

これはクラスメソッド

インスタンスメソッド

これはクラスメソッド

このように出力された

さらに

class Haha
  def lala
    puts "インスタンスメソッド"
    begin
      papa
    rescue
      puts "呼び出し失敗"
    end
  end

  def self.mama
    puts "これはクラスメソッド"
    begin
      papa
    rescue
      puts "呼び出し失敗"
    end
  end

  def self.papa
    puts "papa成功"
  end
end

Haha.new.lala
Haha.mama

このようにコードを打ったところ

ruby practice.rb

インスタンスメソッド

呼び出し失敗

これはクラスメソッド

papa成功

このように出力された

とりあえず勉強しないといけないところ

まず
requireとincludeとextendについて

https://qiita.com/go8/items/db936ff7312ba7d97315

次に

mixinについて

https://qiita.com/k-sekido/items/6ad469df22ddadb75f87

 

そして

ActiveSupport::Concernについて

https://qiita.com/castaneai/items/6dc121ce6ff100614f42

 

 

最後にcrudなるcontrollerについて

https://qiita.com/shizuma/items/9f4637b022e990ef5c3b