[#32171] autoload_delete — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#32185] Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...>
こんにちは、山本と申します。
> Dateオブジェクトに+で大きな数字を与えるとおかしくなるようです。
山本です。
> アルゴリズムの意味がわからないで書いた、表層的なパッチなので
Hi,
> 1.9ではRationalとComplexを組み込みに、という話はありましたが、
原です。
ささだです.
[#32192] test-all results - ruby 1.9.0 (2007-11-09 patchlevel 0) [i686-linux] — SASADA Koichi <ko1@...>
ささだです.
[#32198] [提案] Array#tail — "Yusuke ENDOH" <mame@...>
遠藤と申します。
まつもと ゆきひろです
西山と申します
遠藤です。
[#32204] yydebug — Nobuyoshi Nakada <nobu@...>
なかだです。
[#32205] Use two pipes for duplex IO.popen — Tanaka Akira <akr@...>
改心して duplex な IO.popen で socketpair を使うのはやめよう
なかだです。
In article <20071111120021.7f0592e5.nobu@ruby-lang.org>,
[#32206] Integer#ord for 1.8 — Tanaka Akira <akr@...>
1.9 と 1.8 の両方で ?a.ord で 97 が得られるように、1.8 に
[#32219] trunkでビルド失敗 — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32247] round missing (mswin32) — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32263] toplevel irb method — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
[#32266] version string — SASADA Koichi <ko1@...>
ささだです.
[#32268] RFLOAT_VALUE(val), DOUBLE2NUM(dbl) — SASADA Koichi <ko1@...>
ささだです.
SASADA Koichi wrote:
[#32306] nanosecond Time and stat — Tanaka Akira <akr@...>
最近、nanosecond 単位な timestamp があるようです。
In article <874pflntd5.fsf@fsij.org>,
まつもと ゆきひろです
In article <E1Iu2GD-0004Wh-1I@x31>,
[#32308] core dump with undef/alias using dynamic symbols — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
遠藤と申します。
ささだです.
遠藤です。
ささだです.
[#32329] enumerator with single array and multiple arguments. — Tanaka Akira <akr@...>
enumerator を通すとひとつの配列と複数の引数が区別できません。
[#32330] defined?($&) — Tanaka Akira <akr@...>
ふと気がついたんですが、defined?($&) が "expression" になり
まつもと ゆきひろです
まつもと ゆきひろです
ささだです.
[#32333] test/ruby/test_eval.rb — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
ささだです.
まつもと ゆきひろです
[#32348] DRb test leaves ut_eval.rb process — Tanaka Akira <akr@...>
DRb のテストをすると、(テストがいろいろと失敗する他に) プロ
[#32352] 1.9.1のリリース時期について — KIMURA Koichi <hogemuta@...>
木村です。
まつもと ゆきひろです
木村です。
まつもと ゆきひろです
[#32403] Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Takahiro Kambe <taca@...>
こんばんは。
卜部です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
成瀬です。
卜部です。
遠藤と申します。
遠藤です。
ささだです.
まつもと ゆきひろです
[#32404] SEGV on child process by fork on GC.stress. — Tanaka Akira <akr@...>
GC.stress = true 下で fork すると子プロセスが SEGV します。
まつもと ゆきひろです
In article <E1Iy7HA-0006zn-37@x31>,
まつもと ゆきひろです
ささだです.
[#32409] Re: [ruby-cvs:21293] Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green — SASADA Koichi <ko1@...>
ささだです.
さとうふみやす @ OSS テクノロジです。
ささだです.
まつもと ゆきひろです
[ruby-dev:32255] Re: [提案] Array#tail
遠藤です。
07/11/13 に Akinori MUSHA<knu@idaemons.org> さんは書きました:
> ary.drop(1) はどうでしょうか。
あああ、すっかり存在を忘れてました。
ありがとうございます、これで大丈夫です。
お騒がせしたついでに、take と drop のデフォルトを 1 にするパッチ
(+ テスト) を書いてみました。どうでしょうか。
Index: enum.c
===================================================================
--- enum.c (revision 13902)
+++ enum.c (working copy)
@@ -1405,21 +1405,31 @@
/*
* call-seq:
+ * enum.take => array
* enum.take(n) => array
*
- * Returns first n elements from <i>enum</i>.
+ * Returns first n elements from <i>enum</i>. If n is not specified,
+ * returns an array containing only the first element.
*
* a = [1, 2, 3, 4, 5, 0]
+ * a.take # => [1]
* a.take(3) # => [1, 2, 3]
*
*/
static VALUE
-enum_take(VALUE obj, VALUE n)
+enum_take(int argc, VALUE *argv, VALUE obj)
{
VALUE args[2];
+ VALUE n;
- args[1] = NUM2LONG(n);
+ if (argc == 0) {
+ args[1] = 1;
+ }
+ else {
+ rb_scan_args(argc, argv, "01", &n);
+ args[1] = NUM2LONG(n);
+ }
args[0] = rb_ary_new2(args[1]);
rb_block_call(obj, id_each, 0, 0, take_i, (VALUE)args);
return args[0];
@@ -1470,22 +1480,31 @@
/*
* call-seq:
+ * enum.drop => array
* enum.drop(n) => array
*
- * Drops first n elements from <i>enum</i>, and returns rest elements
- * in an array.
+ * Drops first element, or first +n+ elements, from <i>enum</i>, and
+ * returns rest elements in an array.
*
* a = [1, 2, 3, 4, 5, 0]
+ * a.drop # => [2, 3, 4, 5, 0]
* a.drop(3) # => [4, 5, 0]
*
*/
static VALUE
-enum_drop(VALUE obj, VALUE n)
+enum_drop(int argc, VALUE *argv, VALUE obj)
{
VALUE args[2];
+ VALUE n;
- args[1] = NUM2ULONG(n);
+ if (argc == 0) {
+ args[1] = 1;
+ }
+ else {
+ rb_scan_args(argc, argv, "01", &n);
+ args[1] = NUM2LONG(n);
+ }
args[0] = rb_ary_new2(args[1]);
rb_block_call(obj, id_each, 0, 0, drop_i, (VALUE)args);
return args[0];
@@ -1620,9 +1639,9 @@
rb_define_method(rb_mEnumerable,"include?", enum_member, 1);
rb_define_method(rb_mEnumerable,"each_with_index",
enum_each_with_index, -1);
rb_define_method(rb_mEnumerable, "zip", enum_zip, -1);
- rb_define_method(rb_mEnumerable, "take", enum_take, 1);
+ rb_define_method(rb_mEnumerable, "take", enum_take, -1);
rb_define_method(rb_mEnumerable, "take_while", enum_take_while, 0);
- rb_define_method(rb_mEnumerable, "drop", enum_drop, 1);
+ rb_define_method(rb_mEnumerable, "drop", enum_drop, -1);
rb_define_method(rb_mEnumerable, "drop_while", enum_drop_while, 0);
rb_define_method(rb_mEnumerable, "cycle", enum_cycle, 0);
Index: test/ruby/test_array.rb
===================================================================
--- test/ruby/test_array.rb (revision 13902)
+++ test/ruby/test_array.rb (working copy)
@@ -586,6 +586,18 @@
assert_equal(@cls[1, 2, 3], a)
end
+ def test_drop
+ assert_equal([4, 5], @cls[3, 4, 5].drop)
+ assert_equal([3, 4, 5], @cls[3, 4, 5].drop(0))
+ assert_equal([4, 5], @cls[3, 4, 5].drop(1))
+ assert_equal([5], @cls[3, 4, 5].drop(2))
+ assert_equal([], @cls[3, 4, 5].drop(3))
+ assert_equal([], @cls[3, 4, 5].drop(4))
+ assert_raise(ArgumentError) { @cls[3, 4, 5].drop(-1) }
+ assert_equal([], @cls[].drop)
+ assert_equal([], @cls[].drop(1))
+ end
+
def test_dup
for taint in [ false, true ]
for frozen in [ false, true ]
@@ -1103,6 +1115,18 @@
assert_equal(@cls[], @cls[].sort!)
end
+ def test_take
+ assert_equal([3], @cls[3, 4, 5].take)
+ assert_equal([], @cls[3, 4, 5].take(0))
+ assert_equal([3], @cls[3, 4, 5].take(1))
+ assert_equal([3, 4], @cls[3, 4, 5].take(2))
+ assert_equal([3, 4, 5], @cls[3, 4, 5].take(3))
+ assert_equal([3, 4, 5], @cls[3, 4, 5].take(4))
+ assert_raise(ArgumentError) { @cls[3, 4, 5].take(-1) }
+ assert_equal([], @cls[].take)
+ assert_equal([], @cls[].take(1))
+ end
+
def test_to_a
a = @cls[ 1, 2, 3 ]
a_id = a.__id__
--
Yusuke ENDOH <mame@tsg.ne.jp>