Last change
on this file since 321 was 321, checked in by coas-nagasima, 7 years ago |
文字コードを設定
|
-
Property svn:eol-style
set to
native
-
Property svn:mime-type
set to
text/x-ruby;charset=UTF-8
|
File size:
807 bytes
|
Rev | Line | |
---|
[270] | 1 | class Proc
|
---|
| 2 |
|
---|
| 3 | def ===(*args)
|
---|
| 4 | call(*args)
|
---|
| 5 | end
|
---|
| 6 |
|
---|
| 7 | def yield(*args)
|
---|
| 8 | call(*args)
|
---|
| 9 | end
|
---|
| 10 |
|
---|
| 11 | def to_proc
|
---|
| 12 | self
|
---|
| 13 | end
|
---|
| 14 |
|
---|
| 15 | def curry(arity=self.arity)
|
---|
| 16 | type = :proc
|
---|
| 17 | abs = lambda {|a| a < 0 ? -a - 1 : a}
|
---|
| 18 | arity = abs[arity]
|
---|
| 19 | if lambda?
|
---|
| 20 | type = :lambda
|
---|
| 21 | self_arity = self.arity
|
---|
| 22 | if (self_arity >= 0 && arity != self_arity) ||
|
---|
| 23 | (self_arity < 0 && abs[self_arity] > arity)
|
---|
| 24 | raise ArgumentError, "wrong number of arguments (#{arity} for #{abs[self_arity]})"
|
---|
| 25 | end
|
---|
| 26 | end
|
---|
| 27 |
|
---|
| 28 | pproc = self
|
---|
| 29 | make_curry = proc do |given_args=[]|
|
---|
| 30 | send(type) do |*args|
|
---|
| 31 | new_args = given_args + args
|
---|
| 32 | if new_args.size >= arity
|
---|
| 33 | pproc[*new_args]
|
---|
| 34 | else
|
---|
| 35 | make_curry[new_args]
|
---|
| 36 | end
|
---|
| 37 | end
|
---|
| 38 | end
|
---|
| 39 | make_curry.call
|
---|
| 40 | end
|
---|
| 41 |
|
---|
| 42 | end
|
---|
Note:
See
TracBrowser
for help on using the repository browser.