From: arton Date: 2009-02-03T00:06:59+09:00 Subject: [ruby-dev:37874] Symbol as String for C artonです。 1.9になって、Stringの代わりにSymbolが返るように変わったメソッドがありま すが(例: Object#methods)、できれば既存の拡張ライブラリや組み込みRuby に対して救済策が欲しいです。 具体的には、StringValuPtrやStringValueCStrマクロに対してSymbolのVALUEを 与えた場合に、StringのVALUEを与えた場合と同様に振る舞って欲しいです。 確か、StringValuePtr等のマクロは、1.6から1.8(1.7)への移行時に、char*取得 方法としてCプログラムに対して与えられたと記憶しているからです。 しかし、これらのマクロに対してSymbolを与えると現時点では、Symbol#to_str は未定義なのでrb_str_to_str経由でTypeErrorになります。 Symbol#to_strを実装するか、あるいは、rb_string_valueでSymbolをString同様 に特別扱いしていただけると助かります。 *** string.c.org Mon Feb 02 23:46:37 2009 --- string.c Mon Feb 02 23:49:34 2009 *************** rb_string_value(volatile VALUE *ptr) *** 1236,1242 **** { VALUE s = *ptr; if (TYPE(s) != T_STRING) { ! s = rb_str_to_str(s); *ptr = s; } return s; --- 1236,1247 ---- { VALUE s = *ptr; if (TYPE(s) != T_STRING) { ! if (SYMBOL_P(s)) { ! s = rb_sym_to_s(s); ! } ! else { ! s = rb_str_to_str(s); ! } *ptr = s; } return s; -- arton -------------------------------------- Yahoo! JAPAN - Internet safety for children and parents. http://pr.mail.yahoo.co.jp/security/