ruby and activesupport for expart
DESCRIPTION
TRANSCRIPT
Ruby & ActiveSupportfor expart藤岡岳之(xibbar)
今後の予定
classとmoduleからやりましょう継承、mix-inネームスペースdefine_XXX匿名メソッドXXX_eval
rubyのイテレータクロージャってなんジャlambdaとproc
classの初歩と継承# ただの名前と点数を表示するだけのプログラム
class Student attr_accessor :name attr_accessor :english def initialize(name) @name=name end def puts_status puts @name puts @english endend
class RikeiStudent < Student attr_accessor :math attr_accessor :science def puts_status super puts @math puts @science endend
s=Student.new("fujioka")s.english=80s.puts_statusrs=RikeiStudent.new("katahira")rs.english=80rs.math=92rs.science=85rs.puts_status
% ruby person.rbfujioka80katahira809285
解説ポイント•継承•attr_accessor•super•new•initialize•ぐらい?
classの解説ちょっとだけclass Student @@namelist=[] attr_accessor :name attr_accessor :english def initialize(name) @name=name @@namelist.push name end def puts_status puts @name puts @english end def self.namelist @@namelist endend
class RikeiStudent < Student attr_accessor :math attr_accessor :science def puts_status super puts @math puts @science endend
s=Student.new("fujioka")s.english=80s.puts_statusrs=RikeiStudent.new("katahira")rs.english=80rs.math=92rs.science=85rs.puts_statusp Student.namelistp RikeiStudent.namelist
% ruby person.rbfujioka80katahira809285["fujioka", "katahira"]["fujioka", "katahira"]
解説ポイント•クラスメソッド•インスタンスメソッド•クラス変数•インスタンス変数•オブジェクトに型がある•変数に型はない
classの入れ子class Sample attr_accessor :value KATAHIRA="DO" class Sample2 attr_accessor :value def self.katahira KATAHIRA end end class Sample3 endend
sample=Sample.newp samplesample2=Sample::Sample2.newp sample2sample.value="VALUE"p sample.valuep sample2.valuep Sample::Sample2.katahira
#<Sample:0x239ec>#<Sample::Sample2:0x23834>"VALUE"nil"DO"
解説ポイント•インスタンスものは独立している•クラスものは子クラスから呼び出せる
moduleって何?
インスタンスを作れない継承できないmix-inの対象になる
moduleをちょっとだけmodule SampleModule PI=3.14 def self.pi PI end def pi PI endend
p SampleModule.pi
class SampleClass include SampleModuleend
sc=SampleClass.newp sc.pi
% ruby module.rb3.143.14
解説ポイント•moduleをクラスメソッドのように使う•self.piのようにすると呼び出せる
•moduleをmix-in用に使う•includeするとclassのメソッドの一部になる
moduleを入れ子にmodule SampleModule module ChildModule def child_module "CHILD_MODULE" end end def sample_module "SAMPLE_MODULE" endendclass SampleClass include SampleModule include ChildModuleend
sc=SampleClass.newp sc.sample_modulep sc.child_module
% ruby module_chile.rb"SAMPLE_MODULE""CHILD_MODULE"
解説ポイント•同じネームスペースのものしかmix-inされない•入れ子もincludeしなければならない•Railsのソースはほとんどmoduleばっかり•ちょっとだけ見てみよう•ARの呼び出しの部分でも見てみるか。
おしまい
おしまい次回以降も引き続きやりましょう