2017年4月6日木曜日

開発環境

メタプログラミング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 コメント:

コメントを投稿

Comments on Google+: