代码之家  ›  专栏  ›  技术社区  ›  Salil

这样分配多个变量是正确的吗?a=b=c=d=5?

  •  52
  • Salil  · 技术社区  · 14 年前
    a = b = c = d = 5
    
    puts (a) >> 5
    puts (b) >> 5
    puts (b) >> 5
    puts (b) >> 5
    a= a+1
    puts (a) >> 6
    puts (b) >> 5
    

    我发现这样的值分配没有问题。我的问题是应该像上面给出的那样分配还是像这样分配?

    a , b, c, d = 5, 5, 5, 5
    
    6 回复  |  直到 7 年前
        1
  •  99
  •   glenn mcdonald    14 年前

    这里要注意的是,您的情况只能正常工作,因为数字在Ruby中是不可变的。你 不要 希望对字符串、数组、哈希或除数字以外的几乎所有其他对象执行此操作,因为它将创建对同一对象的多个引用,这几乎肯定不是您想要的:

    a = b = c = d = "test"
    b << "x"
    => "testx"
    a
    => "testx"
    

    而并行形式对于所有类型都是安全的:

    a,b,c,d = "test","test","test","test"
    => ["test", "test", "test", "test"]
    b << "x"
    => "testx"
    a
    => "test"
    
        2
  •  8
  •   Firas Assaad    14 年前

    这样分配没什么错( a = b = c = d = 5 )如果所有变量都需要相同的值,我个人更喜欢它而不是多次赋值。

    另一种方法是:

    a, b, c, d = [5] * 4
    
        3
  •  7
  •   Mike Woodhouse    14 年前

    如果感觉好,就去做。

    正如你所发现的,语言允许它,它的行为也如你所期望的。我建议你唯一应该问自己的问题是表达能力:代码告诉你它的目的是什么吗?

    就我个人而言,除了初始化默认值(最好是零)之外,我不太喜欢使用这个构造。理想情况下,如此初始化的变量也都有类似的用途,例如计数器。但是,如果我有两个以上类似用途的变量,我可能会考虑将它们声明为一种复制形式,例如重构为散列。

        4
  •  4
  •   Igor Krivokon    14 年前

    这两个初始化表示不同的含义。这个 a = b = c = d = 5 表示“所有变量都应初始化为相同的值,该值为5”。另一个, a, b, c, d = 5, 5, 5, 5 ,表示“我有一个变量列表和相应的初始值列表”。

    你的逻辑是这样的吗,所有的变量都应该是相同的?那么第一个更好。如果不是,第二个可能更好。另一个问题:您的4个变量列表是否全面?是否有可能向该组添加或删除另一个变量?如果是这样,我建议用另一种变体:

    a = 5
    b = 5
    c = 5
    d = 5
    
        5
  •  3
  •   Kibet Yegon    12 年前

    我曾经被那个咬过。今天它可以帮你省去几次击键的麻烦,但以后再来咬你。正如@glenn所提到的,它创建了对同一对象的多个引用。

    示例:这适用于两种Ruby 1.8 1.9

    > a = b = Array.new
    => []
    > a.object_id == b.object_id
    => true
    > a << 1
    => [1]
    > b << 2
    => [1, 2]
    
        6
  •  0
  •   Josh Wright    14 年前

    我根本不使用Ruby,所以这可能是一个可以接受的习惯用法,但是 a = b = c = d = 5 我觉得很难看。 a , b, c, d = 5, 5, 5, 5 我觉得好多了。