SlideShare a Scribd company logo
1 of 15
Download to read offline
Vol.2
   Ruby &
ActiveSupport
  for expart
  藤岡岳之(xibbar)
このセッションって


xibbarこと藤岡が自分の勉強がてら気づい
たことを発表するマニアックなセッションで
す
rubyを詳しくというよりは、Railsのソース
を読んでびっくりしたことから派生して、
rubyとrailsの仕組みを調べた結果です
今日の内容



1.mix-inをもっと深く
2.define_xxxを集めてみたよ
3.xxx_evalを集めてみたよ
class methodを定義

# class methodを追加したい

class SampleClass                      解説ポイント
  def self.puts_str(str="hello")
    puts str                       •クラスメソッドとはクラスで共
  end
end                                有のメソッド。

SampleClass.puts_str
mix-inでがんばる

                                    ~% ruby ruby-expert2-2.rb
                                    ruby-expert2-2.rb:12: undefined method
# mix-inでクラスメソッドを追加し                `puts_str' for SampleClass:Class
たい                                  (NoMethodError)
module SampleModule
  def self.puts_str(str="hello")
    puts str                              解説ポイント
  end
end                                •ぎゃ!
class SampleClass
  include SampleModule             •これでできないのかー。。。
end
                                   •できそうなんだけどなぁ。。
SampleClass.puts_str
                                   •結論としては、moduleメソッ
                                   ドはSampleModule.puts_strみ
                                   たいにしか使えない。
mix-inをもうちょっと

# なんとかmix-inでクラスメソッド
を追加したい                              解説ポイント

module SampleModule
                                •なんだこれ?
  def self.included(base)       •クラスメソッドを書きたいだけ
    base.extend(ClassMethods)
  end                           なのに、なげーよ。
  module ClassMethods
    def puts_str(str="hello")   •でも、思いついた人はエラい!
      puts str                  •includedってなんだ?
    end
  end                           •extendってなんだ?
end
class SampleClass               •上の2つは次で解説
  include SampleModule
end

SampleClass.puts_str
includedとextend
included(class_or_module)           extend(module)
   self が include されたときに対象のクラスまた    引数で指定したモジュールのインスタンスメソッドを self の特
はモジュールを引数にインタプリタから呼び出されま            異メソッドとして追加します。self を返します。
す。
                                    include は、クラス(のインスタンス)に機能を追加しますが、
   module Foo                       extend は、ある特定のオブジェクトだけにモジュールの機能を
     def self.included(mod)         追加したいときに使用します。
       p "#{mod} include #{self}"
     end                            module Foo
   end                                def a
   class Bar                            'ok'
     include Foo                      end
   end                              end
   # => "Bar include Foo"
                                    obj = Object.new
                                    obj.extend Foo
                                    p obj.a          #=> "ok"

                    解説ポイント
     •なんと、includedの引数は呼び出し元そ
      のもの
     •extendは引数のモジュールを特異メソッ
      ドとして追加
mix-inでできた

# なんとかmix-inでクラスメソッド
を追加したい                                解説ポイント
module SampleModule             •includedされたタイミングで呼
  def self.included(base)
    base.extend(ClassMethods)   び出し元にClassMedhodsを特
  end
  module ClassMethods           異メソッドとして追加
    def puts_str(str="hello")
      puts str
                                •以上の結果により、特異メソッ
    end                         ドがクラスメソッドのように振
  end
end                             る舞う
class SampleClass
  include SampleModule
end

SampleClass.puts_str
楽な方法 orz
 module ClassMethods                      解説ポイント
   def puts_str(str="hello")       •なんだ、クラスメソッドとしてextend
     puts str
   end                             するだけでよかったのか。
 end
 class SampleClass                 •これでincludeをクラスメソッドとして
 end
                                   やってみるとどうなる?
 SampleClass.extend ClassMethods
 SampleClass.puts_str




~% ruby ruby-expert2-4.rb
hello
includeするとどうなる
                                            解説ポイント

 module ClassMethods                •特異メソッドに対する追加はできるけ
   def puts_str(str="hello")        ど、全体に対する追加はできない。
     puts str
   end                              •privateなんだとさ。
 end
 class SampleClass                  •結論として、extendで特異メソッドの
 end
                                    追加はできるが、includeでクラスメ
 SampleClass.include ClassMethods   ソッドの追加をする時は工夫が必要に
 SampleClass.puts_str
                                    なる。
                                    •こんなところに結論書くなってか。
~% ruby ruby-expert2-5.rb
ruby-expert2-5.rb:11: private       •extendもmix-inの一つだよな。。。
method `include' called for         includeしかmix-inと呼ばないなんてこ
SampleClass:Class (NoMethodError)
                                    とはないよな。。。
とりあえずまとめ



extendでclass methodの追加はできる
includeでclass methodの追加はできない
extendで拡張するのもmix-inだ(ろう)
define_xxxを集めてみた

 define_method(Moduleクラス)



これ以外にdefine_xxxはなかったorz
気を取り直して使ってみる
                                             解説ポイント
 class SampleClass                  •まあ無理して使わなくてもいいな
   define_method(:puts_str){|str|
     puts str                       •ただ、動的にメソッドを定義できる
   }
 end                                 •それがカッコいい
 sample=SampleClass.new              •inplace editorの受ける部分の定義
 sample.puts_str("hello")




~% ruby ruby-expert2-6.rb
hello
eval兄弟を集めてみた


instance_eval(Objectクラス)
class_eval(Moduleクラス)
module_eval(Moduleクラス)
eval(組み込み関数)
おしまい

おしまい
次回以降予定
ブロック、クロージャ、イテレータ
lambda、proc、ついでにbinding
継続
method_missing
erbなんてどう?

More Related Content

Viewers also liked

栃木Ruby会議02 Lt途中まで
栃木Ruby会議02 Lt途中まで栃木Ruby会議02 Lt途中まで
栃木Ruby会議02 Lt途中までxibbar
 
Adv 410 Quiz 2 Take Home
Adv 410 Quiz 2 Take HomeAdv 410 Quiz 2 Take Home
Adv 410 Quiz 2 Take HomeCubLuv
 
札幌Ruby会議03のlt
札幌Ruby会議03のlt札幌Ruby会議03のlt
札幌Ruby会議03のltxibbar
 
地域振興論2009
地域振興論2009地域振興論2009
地域振興論2009xibbar
 
エンジニア志望だったのにRuby社長をしてよかったと思う5つのこと
エンジニア志望だったのにRuby社長をしてよかったと思う5つのことエンジニア志望だったのにRuby社長をしてよかったと思う5つのこと
エンジニア志望だったのにRuby社長をしてよかったと思う5つのことxibbar
 
Fukushima.rb#00
Fukushima.rb#00Fukushima.rb#00
Fukushima.rb#00xibbar
 
Japan's games industries
Japan's games industriesJapan's games industries
Japan's games industriesGerhard Fasol
 
仙台Ruby会議02 Pdf
仙台Ruby会議02 Pdf仙台Ruby会議02 Pdf
仙台Ruby会議02 Pdfxibbar
 
tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法
tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法
tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法xibbar
 

Viewers also liked (9)

栃木Ruby会議02 Lt途中まで
栃木Ruby会議02 Lt途中まで栃木Ruby会議02 Lt途中まで
栃木Ruby会議02 Lt途中まで
 
Adv 410 Quiz 2 Take Home
Adv 410 Quiz 2 Take HomeAdv 410 Quiz 2 Take Home
Adv 410 Quiz 2 Take Home
 
札幌Ruby会議03のlt
札幌Ruby会議03のlt札幌Ruby会議03のlt
札幌Ruby会議03のlt
 
地域振興論2009
地域振興論2009地域振興論2009
地域振興論2009
 
エンジニア志望だったのにRuby社長をしてよかったと思う5つのこと
エンジニア志望だったのにRuby社長をしてよかったと思う5つのことエンジニア志望だったのにRuby社長をしてよかったと思う5つのこと
エンジニア志望だったのにRuby社長をしてよかったと思う5つのこと
 
Fukushima.rb#00
Fukushima.rb#00Fukushima.rb#00
Fukushima.rb#00
 
Japan's games industries
Japan's games industriesJapan's games industries
Japan's games industries
 
仙台Ruby会議02 Pdf
仙台Ruby会議02 Pdf仙台Ruby会議02 Pdf
仙台Ruby会議02 Pdf
 
tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法
tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法
tDiaryなどのレガシーウェブアプリをRuby1.9で動かす方法
 

Similar to RubyとActive Support for expert 2

Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)baban ba-n
 
ebisu.rb #19 超実践 super
ebisu.rb #19 超実践 superebisu.rb #19 超実践 super
ebisu.rb #19 超実践 superKaito Minatoya
 
Ruby2.0 - refinements - 鳥取Ruby会 第11回
Ruby2.0 - refinements - 鳥取Ruby会 第11回Ruby2.0 - refinements - 鳥取Ruby会 第11回
Ruby2.0 - refinements - 鳥取Ruby会 第11回Rie HIRONO
 
Vbaでもtdd
VbaでもtddVbaでもtdd
Vbaでもtddterahide
 
super super & sub sub の話
super super & sub sub の話super super & sub sub の話
super super & sub sub の話Masashi Umezawa
 
20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogrammingMasanori Kado
 
第4回Magento Cafe Plus〜Rewriteと独自テーブル
第4回Magento Cafe Plus〜Rewriteと独自テーブル第4回Magento Cafe Plus〜Rewriteと独自テーブル
第4回Magento Cafe Plus〜Rewriteと独自テーブルHirokazu Nishi
 
2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターン2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターンkeki3
 
pi-13. 今までの総まとめ
pi-13. 今までの総まとめpi-13. 今までの総まとめ
pi-13. 今までの総まとめkunihikokaneko1
 

Similar to RubyとActive Support for expert 2 (11)

Haskell 6-module
Haskell 6-moduleHaskell 6-module
Haskell 6-module
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
 
ebisu.rb #19 超実践 super
ebisu.rb #19 超実践 superebisu.rb #19 超実践 super
ebisu.rb #19 超実践 super
 
Ruby2.0 - refinements - 鳥取Ruby会 第11回
Ruby2.0 - refinements - 鳥取Ruby会 第11回Ruby2.0 - refinements - 鳥取Ruby会 第11回
Ruby2.0 - refinements - 鳥取Ruby会 第11回
 
Xtend の紹介
Xtend の紹介Xtend の紹介
Xtend の紹介
 
Vbaでもtdd
VbaでもtddVbaでもtdd
Vbaでもtdd
 
super super & sub sub の話
super super & sub sub の話super super & sub sub の話
super super & sub sub の話
 
20110820 metaprogramming
20110820 metaprogramming20110820 metaprogramming
20110820 metaprogramming
 
第4回Magento Cafe Plus〜Rewriteと独自テーブル
第4回Magento Cafe Plus〜Rewriteと独自テーブル第4回Magento Cafe Plus〜Rewriteと独自テーブル
第4回Magento Cafe Plus〜Rewriteと独自テーブル
 
2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターン2019年度 若手技術者向け講座 デザインパターン
2019年度 若手技術者向け講座 デザインパターン
 
pi-13. 今までの総まとめ
pi-13. 今までの総まとめpi-13. 今までの総まとめ
pi-13. 今までの総まとめ
 

More from xibbar

1000speakers仙台
1000speakers仙台1000speakers仙台
1000speakers仙台xibbar
 
More Better Nested Set
More Better Nested SetMore Better Nested Set
More Better Nested Setxibbar
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3xibbar
 
Tohoku Open Source Conference 2008
Tohoku Open Source Conference 2008Tohoku Open Source Conference 2008
Tohoku Open Source Conference 2008xibbar
 
acts_asを使ってみよう
acts_asを使ってみようacts_asを使ってみよう
acts_asを使ってみようxibbar
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Prxibbar
 

More from xibbar (6)

1000speakers仙台
1000speakers仙台1000speakers仙台
1000speakers仙台
 
More Better Nested Set
More Better Nested SetMore Better Nested Set
More Better Nested Set
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 
Tohoku Open Source Conference 2008
Tohoku Open Source Conference 2008Tohoku Open Source Conference 2008
Tohoku Open Source Conference 2008
 
acts_asを使ってみよう
acts_asを使ってみようacts_asを使ってみよう
acts_asを使ってみよう
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Pr
 

Recently uploaded

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-LoopへTetsuya Nihonmatsu
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 

Recently uploaded (12)

TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 03 CTEA
2024 03 CTEA2024 03 CTEA
2024 03 CTEA
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 

RubyとActive Support for expert 2