object.c: Kernel#yield_self
* object.c (rb_obj_yield_self): new method which yields the receiver and returns the result. [ruby-core:46320] [Feature #6721] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
dabaaafd9f
commit
cec0668209
4
NEWS
4
NEWS
@ -40,6 +40,10 @@ with all sufficient information, see the ChangeLog file or Redmine
|
||||
|
||||
* exception message "stream closed" is changed [Bug #13405]
|
||||
|
||||
* Kernel
|
||||
|
||||
* Kernel#yield_self [Feature #6721]
|
||||
|
||||
* Numeric
|
||||
|
||||
* Numerical comparison operators (<,<=,>=,>) no longer rescue exceptions
|
||||
|
18
object.c
18
object.c
@ -497,6 +497,23 @@ rb_obj_itself(VALUE obj)
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* obj.yield_self {|_obj|...} -> an_object
|
||||
*
|
||||
* Yields <i>obj</i> and returns the result.
|
||||
*
|
||||
* 'my string'.yield_self {|s|s.upcase} #=> "MY STRING"
|
||||
*
|
||||
*/
|
||||
|
||||
static VALUE
|
||||
rb_obj_yield_self(VALUE obj)
|
||||
{
|
||||
RETURN_ENUMERATOR(obj, 0, 0);
|
||||
return rb_yield_values2(1, &obj);
|
||||
}
|
||||
|
||||
/* :nodoc: */
|
||||
VALUE
|
||||
rb_obj_init_copy(VALUE obj, VALUE orig)
|
||||
@ -3507,6 +3524,7 @@ InitVM_Object(void)
|
||||
rb_define_method(rb_mKernel, "clone", rb_obj_clone2, -1);
|
||||
rb_define_method(rb_mKernel, "dup", rb_obj_dup, 0);
|
||||
rb_define_method(rb_mKernel, "itself", rb_obj_itself, 0);
|
||||
rb_define_method(rb_mKernel, "yield_self", rb_obj_yield_self, 0);
|
||||
rb_define_method(rb_mKernel, "initialize_copy", rb_obj_init_copy, 1);
|
||||
rb_define_method(rb_mKernel, "initialize_dup", rb_obj_init_dup_clone, 1);
|
||||
rb_define_method(rb_mKernel, "initialize_clone", rb_obj_init_dup_clone, 1);
|
||||
|
@ -18,6 +18,14 @@ class TestObject < Test::Unit::TestCase
|
||||
assert_same(object, object.itself, feature6373)
|
||||
end
|
||||
|
||||
def test_yield_self
|
||||
feature = '[ruby-core:46320] [Feature #6721]'
|
||||
object = Object.new
|
||||
assert_same(self, object.yield_self {self}, feature)
|
||||
assert_same(object, object.yield_self {|x| break x}, feature)
|
||||
assert_instance_of(Enumerator, object.yield_self)
|
||||
end
|
||||
|
||||
def test_dup
|
||||
assert_equal 1, 1.dup
|
||||
assert_equal true, true.dup
|
||||
|
Loading…
x
Reference in New Issue
Block a user