SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
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なんてどう?

Contenu connexe

En vedette

栃木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
 

En vedette (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で動かす方法
 

Similaire à 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
 

Similaire à 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. 今までの総まとめ
 

Plus de 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
 

Plus de 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
 

Dernier

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Dernier (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

RubyとActive Support for expert 2