代码之家  ›  专栏  ›  技术社区  ›  Nicolas Blanco

如何在不创建新对象实例的情况下将整型变量增加X

  •  3
  • Nicolas Blanco  · 技术社区  · 15 年前

    如何在不创建新对象实例的情况下将整数变量增加X?

    += 不起作用,因为:

    ree-1.8.7-2010.02 > x = 1
    1
    ree-1.8.7-2010.02 > x.object_id
    3
    ree-1.8.7-2010.02 > x += 1
    2
    ree-1.8.7-2010.02 > x.object_id
    5
    
    5 回复  |  直到 9 年前
        1
  •  2
  •   Andrew Grimm Alex Wayne    15 年前

    你不能。不能用Ruby,也不能用我知道的任何其他编程语言。

    表示数学数的对象 1 总是 有价值 . 对表示数学数的对象进行变异 突然有价值 2 简直是疯了,因为现在突然 1 + 1 == 4 .

        2
  •  2
  •   Berin Loritsch    15 年前

    先举个例子。试试这个:

    x = 2
    y = 1 + 1
    
    x.object_id
    y.object_id
    

    每个唯一的号码都有自己的身份。Ruby的对象比您在C++和Java中发现的更深一点(两者都有原语和类的概念)。

    重要的是当你询问 x 第二次 价值 价值将是你所期望的。对象标识符并不重要,除非您是垃圾收集器。

        3
  •  0
  •   Andrew Grimm Alex Wayne    15 年前

    更糟的是 Bignum s公司

    begin
      a = 1234567890
      puts a.object_id
      b = 1234567890
      puts b.object_id
    end
    

    给了我

    10605136
    10604960
    
        4
  •  0
  •   karatedog    15 年前

    即使只是组织一个简单的循环,执行时间也非常糟糕。原语不应该从Ruby中去掉。

    (1..16000).each do
      (1..16000).each do
      end
    end
    

    这本身需要30-40秒才能完成(联想T400,Virtualboxed Ubuntu),你甚至还没有做过复杂的事情。

        5
  •  0
  •   Sony Santos    15 年前

    您可以使用助手类:

    class Variable
      def initialize value = nil
        @value = value
      end
    
      attr_accessor :value
    
      def method_missing *args, &blk
        @value.send(*args, &blk)
      end
    
      def to_s
        @value.to_s
      end
    
      # here's the increment/decrement part
      def inc x = 1
        @value += x
      end
    
      def dec x = 1
        @value -= x
      end
    end
    
    x = Variable.new 1
    puts x               #=> 1
    puts x.object_id     #=> 22456116 (or whatever)
    
    x.inc
    puts x               #=> 2
    puts x.object_id     #=> 22456116
    
    x.inc 3
    puts x               #=> 5
    puts x.object_id     #=> 22456116
    

    “类变量”的更多用法 here .

    推荐文章