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