[#32945] Shift_JIS variants and UTF-16 support — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

22 messages 2008/01/07
[#32953] Re: Shift_JIS variants and UTF-16 support — Martin Duerst <duerst@...> 2008/01/07

中村さん、こんにちは。

[#32955] Re: Shift_JIS variants and UTF-16 support — Yukihiro Matsumoto <matz@...> 2008/01/07

まつもと ゆきひろです

[#32959] Re: Shift_JIS variants and UTF-16 support — "NARUSE, Yui" <naruse@...> 2008/01/07

成瀬です。

[#32960] Re: Shift_JIS variants and UTF-16 support — Yukihiro Matsumoto <matz@...> 2008/01/07

まつもと ゆきひろです

[#32992] ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...>

成瀬です。

18 messages 2008/01/08
[#32994] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/09

まつもと ゆきひろです

[#32995] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Martin Duerst <duerst@...> 2008/01/09

At 18:13 08/01/09, Yukihiro Matsumoto wrote:

[#33011] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#33012] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/11

まつもと ゆきひろです

[#33014] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — "NARUSE, Yui" <naruse@...> 2008/01/11

成瀬です。

[#33015] Re: ASCII is alias of US-ASCII; replica of dummy encoding is not a dummy — Yukihiro Matsumoto <matz@...> 2008/01/11

まつもと ゆきひろです

[#33239] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Tanaka Akira <akr@...>

In article <200801210259.m0L2x3CW017171@ci.ruby-lang.org>,

11 messages 2008/01/21
[#33240] Re: [ruby-cvs:22386] Ruby:r15149 (trunk): * string.c (rb_str_each_char): move forward. — Nobuyoshi Nakada <nobu@...> 2008/01/21

なかだです。

[#33303] Time#strftimeのエンコーディング — rubikitch@...

るびきちです。

13 messages 2008/01/23
[#33305] Re: Time#strftimeのエンコーディング — Yukihiro Matsumoto <matz@...> 2008/01/23

まつもと ゆきひろです

[#33368] summary of script encoding — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

22 messages 2008/01/25
[#33375] Re: summary of script encoding — Yukihiro Matsumoto <matz@...> 2008/01/25

まつもと ゆきひろです

[#33376] Re: summary of script encoding — "U.Nakamura" <usa@...> 2008/01/25

こんにちは、なかむら(う)です。

[#33387] HashからStructを作る — rubikitch@...

るびきちです。

19 messages 2008/01/25
[#33455] Re: HashからStructを作る — Yukihiro Matsumoto <matz@...> 2008/01/28

まつもと ゆきひろです

[#33505] Re: HashからStructを作る — rubikitch@... 2008/01/29

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33507] Re: HashからStructを作る — Yukihiro Matsumoto <matz@...> 2008/01/29

まつもと ゆきひろです

[#33508] Re: HashからStructを作る — rubikitch@... 2008/01/29

From: Yukihiro Matsumoto <matz@ruby-lang.org>

[#33433] Win32OLE: set encoding to OLE string — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

16 messages 2008/01/28

[#33461] Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...>

=1B$B?9ED$H?=3D$7$^$9!#=1B(B

19 messages 2008/01/28
[#33473] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Nobuyoshi Nakada <nobu@...> 2008/01/28

なかだです。

[#33503] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/29

森田です。

[#33514] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Nobuyoshi Nakada <nobu@...> 2008/01/29

なかだです。

[#33518] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/30

森田です。

[#33545] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Ryutaro Amano <wn9r-amn@...> 2008/01/31

天野竜太郎と申します。

[#33546] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/31

森田です。

[#33547] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — Ryutaro Amano <wn9r-amn@...> 2008/01/31

天野です。

[#33551] Re: Failed to make ruby-1.8.6-p111 on MacOSX 10.5(Leopard) — MORITA Hideyuki <h-morita@...> 2008/01/31

森田です。

[#33488] 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

20 messages 2008/01/29
[#33491] Re: 現在の script encoding の値を得る方法は? — Yukihiro Matsumoto <matz@...> 2008/01/29

まつもと ゆきひろです

[#33500] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/29

永井@知能.九工大です.

[#33501] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/29

成瀬です。

[#33515] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/30

永井@知能.九工大です.

[#33516] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/30

成瀬です。

[#33519] Re: 現在の script encoding の値を得る方法は? — Hidetoshi NAGAI <nagai@...> 2008/01/30

永井@知能.九工大です.

[#33522] Re: 現在の script encoding の値を得る方法は? — "NARUSE, Yui" <naruse@...> 2008/01/30

成瀬です。

[ruby-dev:33509] Re: HashからStructを作る

From: "Yusuke ENDOH" <mame@...>
Date: 2008-01-29 15:13:58 UTC
List: ruby-dev #33509
遠藤と申します。

08/01/29 に rubikitch@ruby-lang.org<rubikitch@ruby-lang.org> さんは書きました:
> From: Yukihiro Matsumoto <matz@ruby-lang.org>
> Subject: [ruby-dev:33507] Re: HashからStructを作る
> Date: Tue, 29 Jan 2008 23:34:17 +0900
>
> > 「Struct.new(:a => 1)」で「Struct.new(:a).new(1)」の意味なん
> > ですね。プログラムにちゃんとそう書いてあるのに。
> >
> > ま、それは私の間違いなんで置いといて、そうすると、インスタン
> > スがひとつしかないStructを毎回作ることになりますね。それって
> > どれだけうれしいんですかね。外から見る限り、単なるHashと大差
> > ないような。もちろん多少メモリ効率は違いますが、それ意外に特
> > にうれしいことはなさそうな上に、生成するのにHashひとつ、イン
> > スタンスごとに無名クラスひとつ作っちゃうのでそこまでメモリ効
> > 率もよくはないような。
>
> やっぱり st.a のようにアクセサでアクセスできることです。
> アクセサの方がオブジェクト指向している感じだし、
> メンバ名の打ち間違いをしようものならエラーを投げてくれるので使う方としては
> とても嬉しいです。

とても共感したので実装してみました。

$ ./ruby -e 'p Struct.new(:a => 1, :b => 2, :c => 3)'
#<struct a=1, b=2, c=3>

議論のたたき台になれば幸いです。


Index: struct.c
===================================================================
--- struct.c	(revision 15331)
+++ struct.c	(working copy)
@@ -281,6 +281,13 @@
     return make_struct(nm, ary, rb_cStruct);
 }

+static int
+keyvalue_i(VALUE key, VALUE value, void *ptr) {
+    VALUE *arg = (VALUE*) ptr;
+    rb_ary_push(arg[0], key);
+    rb_ary_push(arg[1], value);
+}
+
 /*
  *  call-seq:
  *     Struct.new( [aString] [, aSym]+> )    => StructClass
@@ -318,12 +325,19 @@
 static VALUE
 rb_struct_s_def(int argc, VALUE *argv, VALUE klass)
 {
-    VALUE name, rest;
+    VALUE name, rest, values = Qfalse;
     long i;
     VALUE st;
     ID id;

-    rb_scan_args(argc, argv, "1*", &name, &rest);
+    if (rb_scan_args(argc, argv, "1*", &name, &rest) == 1 &&
TYPE(name) == T_HASH) {
+	VALUE arg[2];
+	rest = arg[0] = rb_ary_new();
+	values = arg[1] = rb_ary_new();
+	rb_hash_foreach(name, keyvalue_i, (VALUE)&arg);
+	name = Qnil;
+    }
+
     for (i=0; i<RARRAY_LEN(rest); i++) {
 	id = rb_to_id(RARRAY_PTR(rest)[i]);
 	RARRAY_PTR(rest)[i] = ID2SYM(id);
@@ -337,6 +351,10 @@
 	rb_mod_module_eval(0, 0, st);
     }

+    if (values) {
+	return rb_struct_alloc(st, values);
+    }
+
     return st;
 }


-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread