| 著作一覧 |
URL系(今や良くわからないけど、とにかく/\w+:\w*/なやつ)モニカはなんでも認めるようにした(これまではnew:モニカとobjref:モニカだけ特別扱い)。WinNT:モニカとかいつの間に導入されたんだろう。
オプション引数のチェックをしていないので、VT_EMPTYとVE_ERROR+DISP_E_MEMBERNOTFOUNDの設定が曖昧なように思える。副作用があるメソッド呼び出しとかでまずいんじゃないだろうか?
(名前つき引数をASRに移植中)追記:
てな使い方ばかりなので名前付き引数を実際に使ったことがまったくなかった(位置を使うしな)。で、今回初めて知ったことがいっぱい。
なお、Win32OLE(ruby-1.8.5)用のパッチ。人によっては幸せかも。
--- win32ole.c Mon Jun 19 22:15:58 2006
+++ win32ole.c.new Sat Dec 02 15:13:09 2006
@@ -1914,4 +1914,5 @@ hash2named_arg(pair, pOp)
unsigned int index, i;
VALUE key, value;
+ char* name;
index = pOp->dp.cNamedArgs;
@@ -1920,5 +1921,9 @@ hash2named_arg(pair, pOp)
---------------------------------------*/
key = rb_ary_entry(pair, 0);
- if(TYPE(key) != T_STRING) {
+ if(SYMBOL_P(key)) {
+ name = rb_id2name(SYM2ID(key));
+ } else if (TYPE(key) == T_STRING) {
+ name = StringValuePtr(key);
+ } else {
/* clear name of dispatch parameters */
for(i = 1; i < index + 1; i++) {
@@ -1934,5 +1939,5 @@ hash2named_arg(pair, pOp)
/* pNamedArgs[0] is , so "index + 1" */
- pOp->pNamedArgs[index + 1] = ole_mb2wc(StringValuePtr(key), -1);
+ pOp->pNamedArgs[index + 1] = ole_mb2wc(name);
value = rb_ary_entry(pair, 1);
おれもこういうことが言ってみたい。正しい考えだと思うし。が、けものみちがなければ進むこともできないわけで、目の前の熊笹を鎌でなぎはらいながらあっち行ったりこっち行ったりハイキング。それはそれで楽しいところが逆に問題なんだろうけど。
(抽象化の話なわけだから、ここでは速度をコードとそれを記述するための作業量に置き換えれば基幹系システム――に限定する必要すらない――もコンパイラも同じことが言えるだろうという意味において)
ジェズイットを見習え |