[前][次][番号順一覧][スレッド一覧]

ruby-changes:3220

From: ko1@a...
Date: 26 Dec 2007 12:49:35 +0900
Subject: [ruby-changes:3220] akr - Ruby:r14713 (trunk): update lambda? doc.

akr	2007-12-26 12:49:10 +0900 (Wed, 26 Dec 2007)

  New Revision: 14713

  Modified files:
    trunk/proc.c

  Log:
    update lambda? doc.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/proc.c?r1=14713&r2=14712

Index: proc.c
===================================================================
--- proc.c	(revision 14712)
+++ proc.c	(revision 14713)
@@ -111,33 +111,102 @@
  * call-seq:
  *   prc.lambda? => true or false
  *
- * Returns true for a Proc object which argument check is rigid.
+ * Returns true for a Proc object which argument handling is rigid.
  * Such procs are typically generated by lambda.
  *
+ * A Proc object generated by proc ignore extra arguments.
+ *
+ *   proc {|a,b| [a,b] }.call(1,2,3)    => [1,2]
+ *
+ * It provides nil for lacked arguments.
+ *
+ *   proc {|a,b| [a,b] }.call(1)        => [1,nil]
+ *
+ * It expand single-array argument.
+ *
+ *   proc {|a,b| [a,b] }.call([1,2])    => [1,2]
+ *
+ * A Proc object generated by lambda doesn't have such tricks.
+ *
+ *   lambda {|a,b| [a,b] }.call(1,2,3)  => ArgumentError
+ *   lambda {|a,b| [a,b] }.call(1)      => ArgumentError
+ *   lambda {|a,b| [a,b] }.call([1,2])  => ArgumentError
+ *
+ * Proc#lambda? is a predicate for the tricks.
+ * It returns true if no tricks.
+ *
  *   lambda {}.lambda?          => true
- *   lambda {|a,b| [a,b]}.call(1,2,3)   => ArgumentError
- *
  *   proc {}.lambda?            => false
- *   proc {|a,b| [a,b]}.call(1,2,3)     => [1,2]
  *
+ * Proc.new is same as proc.
+ *
  *   Proc.new {}.lambda?        => false
  *
- *   def m() end
- *   method(:m).to_proc.lambda? => true
+ * lambda, proc and Proc.new preserves the tricks of
+ * a Proc object given by & argument.
  *
+ *   lambda(&lambda {}).lambda?   => true
+ *   proc(&lambda {}).lambda?     => true
+ *   Proc.new(&lambda {}).lambda? => true
+ *
+ *   lambda(&proc {}).lambda?   => false
+ *   proc(&proc {}).lambda?     => false
+ *   Proc.new(&proc {}).lambda? => false
+ *
+ * A Proc object generated by & argument has the tricks
+ *
  *   def n(&b) b.lambda? end
  *   n {}                       => false
+ *
+ * The & argument preserves the tricks if a Proc object is given
+ * by & argument.
+ *
+ *   n(&lambda {})              => true
  *   n(&proc {})                => false
  *   n(&Proc.new {})            => false
- *   n(&lambda {})              => true
+ *
+ * A Proc object converted from a method has no tricks.
+ *
+ *   def m() end
+ *   method(:m).to_proc.lambda? => true
+ *
  *   n(&method(:m))             => true
  *   n(&method(:m)).to_proc     => true
  *
+ * define_method is treated same as method definition.
+ * The defined method has no tricks.
+ *
  *   class C
  *     define_method(:d) {}
  *   end
+ *   C.new.e(1,2)       => ArgumentError
  *   C.new.method(:d).to_proc.lambda?   => true
  *
+ * define_method always defines a method without the tricks,
+ * even if a non-lambda Proc object is given.
+ * This is only the exception which the tricks is changed.
+ *
+ *   class C
+ *     define_method(:e, &proc {})
+ *   end
+ *   C.new.e(1,2)       => ArgumentError
+ *   C.new.method(:e).to_proc.lambda?   => true
+ *
+ * This exception is for a wrapper of define_method.
+ * It eases defining a method defining method which defines a usual method which has no tricks.
+ *
+ *   class << C
+ *     def def2(name, &body)
+ *       define_method(name, &body)
+ *     end
+ *   end
+ *   class C
+ *     def2(:f) {}
+ *   end
+ *   C.new.f(1,2)       => ArgumentError
+ *
+ * The wrapper, def2, defines a method which has no tricks.
+ *
  */
 
 static VALUE

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧]