[#29374] nil.to_s — Shugo Maeda <shugo@...>

前田です。

59 messages 2006/09/01
[#29375] Re: nil.to_s — "U.Nakamura" <usa@...> 2006/09/01

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

[#29380] Re: nil.to_s — Yukihiro Matsumoto <matz@...> 2006/09/01

まつもと ゆきひろです

[#29387] Re: nil.to_s — Shugo Maeda <shugo@...> 2006/09/01

前田です。

[#29390] Re: nil.to_s — Yukihiro Matsumoto <matz@...> 2006/09/01

まつもと ゆきひろです

[#29398] Re: nil.to_s — "NARUSE, Yui" <naruse@...> 2006/09/01

成瀬です。

[#29400] Re: nil.to_s — Yukihiro Matsumoto <matz@...> 2006/09/01

まつもと ゆきひろです

[#29491] symbol and string — Tanaka Akira <akr@...>

open-uri で :proxy=>nil という指定を行うと、以下のようにエラーになります。

33 messages 2006/09/05
[#29499] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/05

まつもと ゆきひろです

[#29500] Re: symbol and string — Tanaka Akira <akr@...> 2006/09/05

In article <1157470154.047826.13379.nullmailer@x31.priv.netlab.jp>,

[#29503] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/06

まつもと ゆきひろです

[#29504] Re: symbol and string — Tanaka Akira <akr@...> 2006/09/06

In article <1157505538.340126.8472.nullmailer@x31.priv.netlab.jp>,

[#29507] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/06

まつもと ゆきひろです

[#29512] Re: symbol and string — keiju@... (石塚圭樹) 2006/09/06

けいじゅ@いしつかです.

[#29529] Re: symbol and string — SASADA Koichi <ko1@...> 2006/09/08

 ささだです。

[#29530] Re: symbol and string — Yukihiro Matsumoto <matz@...> 2006/09/08

まつもと ゆきひろです

[ruby-dev:29587] Re: [ruby-cvs:17256] ruby, ruby: * time.c (time_to_s): generate RFC822 style date string.

From: Nobuyoshi Nakada <nobu@...>
Date: 2006-09-17 05:42:15 UTC
List: ruby-dev #29587
なかだです。

At Sun, 10 Sep 2006 21:15:10 +0900,
Tadayoshi Funaba wrote in [ruby-dev:29555]:
> 関係あるのかわかりませんが、1.9 では、Date の書式関連がうまく動いてい
> ません。少なくとも、ひとつの理由には、つぎのような違いがあると思います。
> これは最近に変化だと思いますが、仕様変更ですか?
> 
> $ ruby -v -r date -e 'p Date.today.instance_variables.include?("@ajd")'
> ruby 1.8.5 (2006-08-25) [i386-freebsd5.4]
> true

instance_variablesの変更がどう関係するのか不明でしたが、ostruct
のようなことをしているわけですか。instance_variable_defined?(と
class_variable_defined?)は抜けてたんですね。

両方追加するほうがいいと思います。できれば1.8にもbackport希望。

# class_variable_getとclass_variable_setのドキュメント間違って
# るし。


Index: object.c
===================================================================
RCS file: /cvs/ruby/src/ruby/object.c,v
retrieving revision 1.200
diff -p -u -2 -r1.200 object.c
--- object.c	7 Sep 2006 16:11:28 -0000	1.200
+++ object.c	17 Sep 2006 05:39:20 -0000
@@ -1663,4 +1663,33 @@ rb_obj_ivar_set(VALUE obj, VALUE iv, VAL
 /*
  *  call-seq:
+ *     obj.instance_variable_defined?(symbol)    => true or false
+ *
+ *  Returns <code>true</code> if the given instance variable is
+ *  defined in <i>obj</i>.
+ *
+ *     class Fred
+ *       def initialize(p1, p2)
+ *         @a, @b = p1, p2
+ *       end
+ *     end
+ *     fred = Fred.new('cat', 99)
+ *     fred.instance_variable_defined?(:@a)    #=> true
+ *     fred.instance_variable_defined?("@b")   #=> true
+ *     fred.instance_variable_defined?("@c")   #=> false
+ */
+
+static VALUE
+rb_obj_ivar_defined(VALUE obj, VALUE iv)
+{
+    ID id = rb_to_id(iv);
+
+    if (!rb_is_instance_id(id)) {
+	rb_name_error(id, "`%s' is not allowed as an instance variable name", rb_id2name(id));
+    }
+    return rb_ivar_defined(obj, id);
+}
+
+/*
+ *  call-seq:
  *     mod.class_variable_get(symbol)    => obj
  *  
@@ -1672,5 +1701,5 @@ rb_obj_ivar_set(VALUE obj, VALUE iv, VAL
  *       @@foo = 99
  *     end
- *     Fred.class_variable_get(:@foo)     #=> 99
+ *     Fred.class_variable_get(:@@foo)     #=> 99
  */
 
@@ -1700,5 +1729,5 @@ rb_mod_cvar_get(VALUE obj, VALUE iv)
  *       end
  *     end
- *     Fred.class_variable_set(:@foo, 101)      #=> 101
+ *     Fred.class_variable_set(:@@foo, 101)     #=> 101
  *     Fred.new.foo                             #=> 101
  */
@@ -1716,4 +1745,29 @@ rb_mod_cvar_set(VALUE obj, VALUE iv, VAL
 }
 
+/*
+ *  call-seq:
+ *     obj.class_variable_defined?(symbol)    => true or false
+ *
+ *  Returns <code>true</code> if the given class variable is defined
+ *  in <i>obj</i>.
+ *
+ *     class Fred
+ *       @@foo = 99
+ *     end
+ *     Fred.class_variable_defined?(:@@foo)    #=> true
+ *     Fred.class_variable_defined?(:@@bar)    #=> false
+ */
+
+static VALUE
+rb_mod_cvar_defined(VALUE obj, VALUE iv)
+{
+    ID id = rb_to_id(iv);
+
+    if (!rb_is_instance_id(id)) {
+	rb_name_error(id, "`%s' is not allowed as an instance variable name", rb_id2name(id));
+    }
+    return rb_cvar_defined(obj, id);
+}
+
 static VALUE
 convert_type(VALUE val, const char *tname, const char *method, int raise)
@@ -2230,4 +2284,5 @@ Init_Object(void)
     rb_define_method(rb_mKernel, "instance_variable_get", rb_obj_ivar_get, 1);
     rb_define_method(rb_mKernel, "instance_variable_set", rb_obj_ivar_set, 2);
+    rb_define_method(rb_mKernel, "instance_variable_defined?", rb_obj_ivar_defined, 1);
     rb_define_private_method(rb_mKernel, "remove_instance_variable",
 			     rb_obj_remove_instance_variable, 1); /* in variable.c */
@@ -2311,4 +2366,5 @@ Init_Object(void)
     rb_define_method(rb_cModule, "class_variable_get", rb_mod_cvar_get, 1);
     rb_define_method(rb_cModule, "class_variable_set", rb_mod_cvar_set, 2);
+    rb_define_method(rb_cModule, "class_variable_defined?", rb_mod_cvar_defined, 1);
 
     rb_define_method(rb_cClass, "allocate", rb_obj_alloc, 0);
Index: lib/date/format.rb
===================================================================
RCS file: /cvs/ruby/src/ruby/lib/date/format.rb,v
retrieving revision 1.20
diff -p -u -2 -r1.20 format.rb
--- lib/date/format.rb	10 Sep 2006 11:26:31 -0000	1.20
+++ lib/date/format.rb	17 Sep 2006 05:29:38 -0000
@@ -99,8 +99,6 @@ class Date
 	if set
 	  instance_variable_set(t, *args)
-	else
-	  if instance_variables.include?(t)
-	    instance_variable_get(t)
-	  end
+	elsif instance_variable_defined?(t)
+	  instance_variable_get(t)
 	end
       end


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread