2017年4月5日水曜日

開発環境

メタプログラミングRuby 第2版(Paolo Perrotta (著)、角 征典 (翻訳)、オライリージャパン)の1部(メタプログラミング Ruby)、6章(金曜日: コードを記述するコード)、6.3(クイズ: アトリビュートのチェック (手順2))を取り組んでみる。

コード(Emacs)

#!/usr/bin/env ruby2.4
# -*- coding: utf-8 -*-

require './eval.rb'

# def add_checked_attribute(klass, attribute)
#   eval "
# class #{klass.name}
#   def #{attribute}
#     @#{attribute}
#   end
#   def #{attribute}=(value)
#     raise 'Invalid attribute' unless value
#     @#{attribute} = value
#   end
# end
# "
# end

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

入出力結果(Terminal, irb)

$ ./sample2.rb
Loaded suite ./sample2
Started
...

Finished in 0.000605 seconds.
----------------------------------------------------------------------------------------
3 tests, 3 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
100% passed
----------------------------------------------------------------------------------------
4958.68 tests/s, 4958.68 assertions/s
$

0 コメント:

コメントを投稿