初めてのイテレータ
うわーもう、イテレータとかドキドキしちゃうなーもう。初体験
どんなものよ?ググってみよう!
def IF(b)
yield if b
end
IF (true) {
p 'gufufu'
}"gufufu"
なんだこれー!でも、JavaScript 2.0の資料で yield ってあったな!チャンス!一石にちょう!
関数みたいにやると yeield ってやったとこでブロックが呼ばれる!
自分でもなんか書いてみよう。
def it
p 'ahaha'
yield
p 'uhuhu'
yield
p 'ehehe'
end
it { p 'gufufu' }"ahaha" "gufufu" "uhuhu" "gufufu" "ehehe"
初めての Ruby 長くなったので次
Class って動的?
JavaScript のプロトタイプみたいなもの?いやー。違うか。やってみよう!
class Human
def initialize(name)
@name = name
end
def say_name
p @name
end
end
class Programmer < Human
def initialize(name, lang)
super(name)
@lang = lang
end
def develop
p @lang + ' hooooo!'
end
end
amachang = Programmer.new('amachang', 'javascript'.gsub(/javascript/, 'ruby'));
amachang.say_name
amachang.develop
class Human
def say_name
p @name + ' hoooo!'
end
end
amachang.say_name
amachang.develop動的にメソッドの追加などが出来るみたい。
attr_accessor ってのがある。。そののしくみ!知りたい!
知りたい!・・・検索中
class Human
module_eval(<<-EOF)
def #{:initialize}
p 'happy birth time!'
end
EOF
end
Human.new"happy birth time!"
・・・・できた!でも、意味不明・・・。#{} の意味と、module_eval の意味がわからん!でも、class Human というブロックは特殊なブロックではあるけど、定義だけじゃなくて何か実行させることもできそうだ。perl のパッケージだ!なるほど!
class Package
@@name = 'amachang'
p 'hello ' + @@name
end"hello amachang"
なるほどなるほど!
class Package
def hello(name)
p 'hello ' + name
end
Package::hello('amachang')
def hello(name)
p 'hello ! hello ! ' + name
end
Package::hello('amachang')
end-:5: undefined method `hello' for Package:Class (NoMethodError)
・・・・これはダメぽ(´・ω・`)
module_eval って何さ!
文字列をソースに展開するってこと?
class Human
method_name = 'say'
module_eval(<<-EOF)
def #{method_name}_hello
p 'hello'
end;
EOF
end
Human.new.say_hello"hello"
なるほどー。#{hoge} で変数展開ね。
初めての Ruby
クラスを作ってみた!
おお!typo もしなかったし、ヨサゲだ:)
initialize はなくていいらしい
class Human end amachang = Human.new p amachang
#<Human:0x100f69d8>
コンストラクタ!
なんなくオッケー!
class Human
def initialize
p 'ogya-!(ubugoe)'
end
end
amachang = Human.new"ogya-!(ubugoe)"
プロパティ!(フィールド?)Ruby ではなんていうの?(後記:インスタンス変数という)
でも、どうやってインスタンスの外からインスタンス変数にアクセスするんだろう??
class Human
def initialize(name)
@name = name;
end
def say_name
p @name
end
end
amachang = Human.new('amachang')
amachang.say_name"amachang"
こうすると?・・・・nilなんだ!
class Human
def initialize(name)
@name = name;
end
def say_name
p @name
end
end
amachang = Human.allocate
amachang.say_namenil
うーん。まだまだ気になる点が・・・
仮引数と実引数が合わない場合は?・・・・エラー!?まじですか
class Human
def initialize(name)
@name = name;
end
def say_name
p @name
end
end
amachang = Human.new
amachang.say_name-:9:in `initialize': wrong number of arguments (0 for 1) (ArgumentError)
from -:9こうするのか・・・でも、なんで else には then がないんだ!?
class Human
def initialize(*name)
if(name[0]) then
@name = name[0];
else
@name = 'no name'
end
end
def say_name
p @name
end
end
amachang = Human.new
amachang.say_name"no name"