-
Notifications
You must be signed in to change notification settings - Fork 8
議事録(7)
tarya edited this page Sep 20, 2011
·
11 revisions
- 日付:2011年9月14日
- 議事録担当:@y_murase、@ke_tachibanaさん
- AGENDAの共有(by司会)
- 前回決めたTryの再確認
- 初参加者の自己紹介
- メタプログラミングRuby読書会
- 発表
- その他
- KPT(最後の15分)
- 次回の予告と担当割り振り
- inspectを使うのはなぜ?
- eval の中に入れるので、inspect の方がよい
- ダブルクォーテーションなどをRubyコードでそのまま使える文字列リテラルで展開してもらえる
- セーブレベルが有効なのはProcの中だけ
- Ruby文法の仕様
- セーフレベルをカスタマイズできるのか?
- ディスクのフォーマットだけを許可するようにするとか
- 低レベルで実装してそうなので、できないような気がするが、Rubyだからできそうな気もする。
- テストコードを見るとわかるかもしれない。
- classは変数でクラス名は受け取れない
- classは必ず定数しか受け取れない。というのが、文法の仕様
- add_checkd_attributeのattributeという引数はシンボルでもOK?
- #{}の中では、.to_s が呼ばれるので、シンボルを入れても大丈夫
- evalが3種類あって混乱している
- instance_eval
- インスタンスをselfとして使うときに使う
- ブロックを渡せる
- class_eval
- クラスをselfとして使うときに使う
- ブロックを渡せる
- eval
- 文字列しか受け取れないので不便。最終手段。
- ブロックを渡す方が、シンタックスチェックをしてもらえるのでセキュア
- instance_eval
以下のように、メソッド(mymethod)を定義すると、mixinすることも、単純にModuleメソッドとして実行することもできる。
module A
class << self
define_method(:mymethod) do |arg1, arg2, &block|
...
end
end
end
class B
include A
end
B.new.mymethod
A.mymethod("a", "b") do |x|
...
end
このように、define_methodに指定するブロックに引数を指定できるのは、Ruby 1.8.7 以降。
Tips: ファイルの変更を監視して、実行するツール
ifchanged *.rb --d "./meta.sh"
議論がinstance_execの話に発展。
instance_execも引数付きブロックを受け取れるが、これもRuby1.8.7以降。
instance_exec(3) do |x|
...
end
instance_execの引数はどういうときに使うのか?
proc = lambda {|x| puts "lambda #{x}"}
instance.instane_exec(1, &proc) # 1がユーザ入力とか動的に変わるもの
という感じ。
- 告知(ATNDとか):
- モデレータ:
- 議事禄er:
- (勉強会終了後のフィードバック記事)