proc_obj = Proc.new {|a| a }
#<Proc:0x00007fc2fa996fa0@<main>:0>
proc_obj.call(1)
1
def proc_factory
Proc.new
end
block_proc = proc_factory { 'method block' }
block_proc.call
"method block"
proc_factory
ArgumentError: tried to create Proc object without a block <main>:1:in `new' <main>:1:in `proc_factory' <main>:in `<main>' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/bin/iruby:5:in `<top (required)>' /Users/ariga/.rbenv/versions/2.5.1/bin/iruby:23:in `load' /Users/ariga/.rbenv/versions/2.5.1/bin/iruby:23:in `<main>'
p proc_obj[1]
p proc_obj.(1)
1 1
1
proc_obj[1..9]
1..9
Proc#===
メソッド¶1.==(1)
true
sum_proc = Proc.new{|x, y| x + y }
sum_proc === [1, 2]
3
sum_proc[1, 2]
3
def what_class(obj)
case obj
when proc {|x| x.kind_of? String }
String
when proc {|x| x.kind_of? Numeric }
Numeric
else
Class
end
end
p what_class "string"
p what_class 1
what_class []
String Numeric
Class
def what_class_if(obj)
if obj.kind_of? String
String
elsif obj.kind_of? Numeric
Numeric
else
Class
end
end
what_class_if "string"
String
def convert_proc(&block)
block
end
proc_obj = convert_proc { 1 }
proc_obj.call
1
["1"].map(&:to_i)
[1]
def yield_proc
yield
end
proc_obj = Proc.new { 1 }
yield_proc &proc_obj
1
Proc#curry
¶add = Proc.new {|x, y| x + y }
inc = add.curry.(1)
p inc.(2)
append_prefix_atmark = add.curry.("@")
append_prefix_atmark.("peranikov")
3
"@peranikov"
inc.(4)
5
p inc
#<Proc:0x00007fc2fa89c078>
#<Proc:0x00007fc2fa89c078>
inc2 = Proc.new {|y| add.(1, y)}
inc2.(1)
2
p add
p add.curry
p add.curry.(1)
#<Proc:0x00007fc2fa89c1e0@<main>:0> #<Proc:0x00007fc2fa04ba90> #<Proc:0x00007fc2fb099000>
#<Proc:0x00007fc2fb099000>
add[1, 2]
3
add[1]
TypeError: nil can't be coerced into Integer <main>:in `+' <main>:in `block in <main>' <main>:in `<main>' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:44:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run' /Users/ariga/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/iruby-0.3/bin/iruby:5:in `<top (required)>' /Users/ariga/.rbenv/versions/2.5.1/bin/iruby:23:in `load' /Users/ariga/.rbenv/versions/2.5.1/bin/iruby:23:in `<main>'
add.curry[1][3]
0
b = proc {|x, y, z| (x||0) + (y||0) + (z||0) }
p b.curry[1][2][3]
6
6
b = proc {|x, y, z| x + y + z }
b.curry.(1).(2).(3)
6
p b.curry
p b.curry.(1)
p b.curry.(1).(2)
p b.curry.(1).(2).(3)
#<Proc:0x00007fc2f9b8afd8> #<Proc:0x00007fc2f9b83e40> #<Proc:0x00007fc2f9b811b8> 6
6
次回、 「8-2 Proc#new 以外の Proc オブジェクトの作り方」から