summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzzak <zzak@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-19 02:37:01 +0000
committerzzak <zzak@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-01-19 02:37:01 +0000
commiteed593eba6a18a71d876ac49178aeeb0aad6b7c0 (patch)
treef242c824717204f75434916d286fe3fa163935a1
parentb7ae472b58f0bb47754b0db975fe74359c2d4b0f (diff)
* struct.c (Struct.new): Document Struct.new with block
Patch by Hiroyuki Iwatsuki [Bug #7674] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--struct.c17
2 files changed, 19 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index db144d6f5f..47d87e5bb1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jan 19 11:35:00 2013 Zachary Scott <zachary@zacharyscott.net>
+
+ * struct.c (Struct.new): Document Struct.new with block
+ Patch by Hiroyuki Iwatsuki [Bug #7674]
+
Sat Jan 19 09:52:46 2013 Eric Hodel <drbrain@segment7.net>
* doc/syntax/miscellaneous.rdoc: Added section on defined?
diff --git a/struct.c b/struct.c
index fc03130987..5e9f9a15a1 100644
--- a/struct.c
+++ b/struct.c
@@ -283,9 +283,10 @@ rb_struct_define(const char *name, ...)
/*
* call-seq:
- * Struct.new( [aString] [, aSym]+> ) -> StructClass
- * StructClass.new(arg, ...) -> obj
- * StructClass[arg, ...] -> obj
+ * Struct.new( [aString] [, aSym]+> ) -> StructClass
+ * Struct.new( [aString] [, aSym]+> ) {|StructClass| block } -> StructClass
+ * StructClass.new(arg, ...) -> obj
+ * StructClass[arg, ...] -> obj
*
* Creates a new class, named by <i>aString</i>, containing accessor
* methods for the given symbols. If the name <i>aString</i> is
@@ -296,6 +297,16 @@ rb_struct_define(const char *name, ...)
* letter. Assigning a structure class to a constant effectively gives
* the class the name of the constant.
*
+ * If a block is given, it will be evaluated in the context of
+ * <i>StructClass</i>, passing <i>StructClass</i> as a parameter.
+ *
+ * Customer = Struct.new(:name, :address) do
+ * def greeting
+ * "Hello #{name}!"
+ * end
+ * end
+ * Customer.new("Dave", "123 Main").greeting # => "Hello Dave!"
+ *
* <code>Struct::new</code> returns a new <code>Class</code> object,
* which can then be used to create specific instances of the new
* structure. The number of actual parameters must be