第5章(写経)

irb(main):075:0> array = [20, 30]
=> [20, 30]
irb(main):076:0> element = 40
=> 40
irb(main):077:0> eval("array << element")
=> [20, 30, 40]
irb(main):078:0>

irb(main):087:0* def explorer_array(method)
irb(main):088:1>   code = "['a', 'b', 'c'].#{method}"
irb(main):089:1>   puts "Evaluating : #{code}"
irb(main):090:1>   eval code
irb(main):091:1> end
=> nil
irb(main):092:0> loop { p explorer_array(gets()) }
find_index("b")
Evaluating : ['a', 'b', 'c'].find_index("b")
1
map! {|e| e.next}
Evaluating : ['a', 'b', 'c'].map! {|e| e.next}
["b", "c", "d"]
object_id; Dir.glob("*")
Evaluating : ['a', 'b', 'c'].object_id; Dir.glob("*")
["charset.dll", "erb.bat", "gem.bat", "iconv.dll", "irb.bat", "libeay32.dll", "more_test_events.rb", "msvcr100-ruby191.dll", "post-install-1.9.rb", "rake.bat",
"rdoc.bat", "readline.dll", "redflag.rb", "redflag2.rb", "redflag3.rb", "ri.bat", "ruby.exe", "rubyw.exe", "setenv19.bat", "setenvpath19.bat", "ssleay32.dll", "susetenv19.bat", "testrb.bat", "test_events.rb", "uninstall.rb", "with_setup_test_events.rb", "zlib1.dll"]

irb(main):095:0* user_input = "User input : #{gets()}"
china,korea
=> "User input : china,korea\n"
irb(main):096:0> puts user_input.tainted?
true
=> nil
irb(main):097:0>

irb(main):115:0> module CheckedAttributes
irb(main):116:1>   def self.included(base)
irb(main):117:2>     base.extend ClassMethods
irb(main):118:2>   end
irb(main):119:1>
irb(main):120:1*   module ClassMethods
irb(main):121:2>     def attr_checked(attribute, &validation)
irb(main):122:3>       define_method "#{attribute}=" do |value|
irb(main):123:4*         raise 'Invalid attribute' unless validation.call(value)irb(main):124:4>         instance_variable_set("@#{attribute}", value)
irb(main):125:4>       end
irb(main):126:3>
irb(main):127:3*       define_method attribute do
irb(main):128:4*         instance_variable_get "@#{attribute}"
irb(main):129:4>       end
irb(main):130:3>     end
irb(main):131:2>   end
irb(main):132:1> end
=> nil
irb(main):214:0> class Person
irb(main):215:1>   include CheckedAttributes
irb(main):216:1>   attr_checked :age do |v|
irb(main):217:2*     v >= 18
irb(main):218:2>   end
irb(main):219:1> end
=> #<Proc:0x2b5519c@(irb):127 (lambda)>
irb(main):220:0> obj = Person.new
=> #<Person:0x2b53324>
irb(main):221:0> obj.age = 18
=> 18
irb(main):222:0> obj.age = 17
RuntimeError: Invalid attribute
        from (irb):123:in `block in attr_checked'
        from (irb):222
        from C:/Program Files/Ruby-1.9.2/bin/irb.bat:20:in `<main>'
irb(main):223:0>