【问题标题】:How can I break a long ruby hash into multi-lines?如何将长的 ruby​​ 散列分成多行?
【发布时间】:2014-07-06 20:38:00
【问题描述】:

我有这个哈希:

  arr={ [0,1]=>[0,0,1,1], [0,2]=>[0,1,0,1], [0,3]=>[0,1,1,0], [1,2]=>[1,0,0,1], [1,3] =>[1,0,1,0], [2,3] => [1,1,0,0] }

我想把它分成两行,因为它很长,有 121 个字符。我不是线长贴纸,但我的指导线是 80,这比我喜欢的要长

所以我尝试了

  arr={ [0,1] => [0,0,1,1], [0,2] => [0,1,0,1], [0,3] => [0,1,1,0] }
  arr.merge({[1,2] => [1,0,0,1], [1,3] => [1,0,1,0], [2,3] => [1,1,0,0]})

但我的测试因错误而失败

undefined method `[]' for nil:NilClass

我怎样才能更好地打破这个?一种选择是续行\,但这看起来不是特别整洁。

arr={ [0,1]=>[0,0,1,1], [0,2]=>[0,1,0,1], [0,3]=>[0,1,1,0], \
[1,2]=>[1,0,0,1], [1,3] =>[1,0,1,0], [2,3] => [1,1,0,0] }

虽然我想我可以做到

arr={ [0,1]=>[0,0,1,1], [0,2]=>[0,1,0,1], [0,3]=>[0,1,1,0], \
      [1,2]=>[1,0,0,1], [1,3] =>[1,0,1,0], [2,3] => [1,1,0,0] }

但这看起来像是缩进的空白维护气味。

有更简洁的选择吗?

【问题讨论】:

  • ...这里不需要续行,用逗号结束行即可。

标签: ruby hash rspec


【解决方案1】:
arr = {
  [0,1] => [0,0,1,1], [0,2] => [0,1,0,1], [0,3] => [0,1,1,0],
  [1,2] => [1,0,0,1], [1,3] => [1,0,1,0], [2,3] => [1,1,0,0]
}

【讨论】:

    【解决方案2】:

    我更喜欢这样写:

    arr = { 
      [0,1] => [0,0,1,1],
      [0,2] => [0,1,0,1],
      [0,3] => [0,1,1,0],
      [1,2] => [1,0,0,1],
      [1,3] => [1,0,1,0],
      [2,3] => [1,1,0,0] 
    }
    

    它更具可读性。另外我假设您知道使用数组作为键的后果?

    【讨论】:

      【解决方案3】:

      您尝试merge 失败,因为#merge 不会更改您调用它的对象,而是返回一个新的合并对象。要让它工作,你需要使用#merge!:

      arr={ [0,1] => [0,0,1,1], [0,2] => [0,1,0,1], [0,3] => [0,1,1,0] }
      arr.merge!([1,2] => [1,0,0,1], [1,3] => [1,0,1,0], [2,3] => [1,1,0,0])
      

      不过,这有点矫枉过正,因为如其他答案所述,多行哈希非常容易。

      【讨论】:

        猜你喜欢
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        相关资源
        最近更新 更多