開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- ruby 2.4 (プログラミング言語)
- 初めてのRuby(その他の参考書籍)
メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、6章(金曜日: コードを記述するコード)、6.3(クイズ: アトリビュートのチェック (手順3))を取り組んでみる。
コード(Emacs)
#!/usr/bin/env ruby2.4 # -*- coding: utf-8 -*- require './block.rb' # def add_checked_attribute(klass, attribute) # klass.class_eval do # define_method attribute do # instance_variable_get("@#{attribute}") # end # define_method "#{attribute}=" do |value| # raise 'Invalid attribute' unless value # instance_variable_set("@#{attribute}", value) # end # end # end def add_checked_attribute(klass, attribute, &validation) klass.class_eval do define_method attribute do instance_variable_get("@#{attribute}") end define_method "#{attribute}=" do |value| raise 'Invalid attribute' unless validation.call(value) instance_variable_set("@#{attribute}", value) end end end
入出力結果(Terminal, irb)
$ ./sample3.rb Loaded suite ./sample3 Started .. Finished in 0.000531 seconds. ---------------------------------------------------------------------------------------- 2 tests, 2 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 100% passed ---------------------------------------------------------------------------------------- 3766.48 tests/s, 3766.48 assertions/s $
0 コメント:
コメントを投稿