Ruby 2.2.5 哈希模型错误

Ruby 2.2.5 error on hash mockup

我正在尝试模拟一个在顶层仅使用 1 或 2 个已知键名动态生成的哈希,因此我可以使用它进行测试以预期将其转换为嵌套 JSON.这就是我正在使用的:

ruby.exe -v

ruby 2.2.5p319 (2016-04-26 revision 54774) [i386-mingw32]

虽然我遇到了解析问题,但我不确定为什么,或者我到底做错了什么。我真的不知道我的局限性是什么,但这似乎是一个基本的格式问题。但是,在过去的 10 分钟里我一直对它视而不见,所以也许有一些潜在的问题?到目前为止,这是我的整个应用程序:

tcm = { \
        :tc => \
        { \
            :tests => \
            { \
                :alpha_tests => \
                { \
                    :passing_tests => {}, \
                    :failing_tests => \
                    { \
                        :alpha_test_1 => {:name => "alpha_test_1", :result => "FAILED"}, \
                        :alpha_test_2 => {:name => "alpha_test_2", :result => "FAILED"} \
                    } \
                }, \
                :beta_tests => \
                { \
                    :passing_tests => \
                    { \
                        :beta_test_1 => {:name => "beta_test_1", :result => "PASSED"} \
                    }, \
                    :failing_tests => \
                    { \
                        :beta_test_2 => {:name => "beta_test_2", :result => "FAILED"} \
                    } \
                } \
            }, \
            { \
                :test_session => 1293823 \
            } \
        } \
    }

puts tcm

如果您删除 alpha_testsbeta_tests 部分,您的散列是这样的:

tcm = { \
        :tc => \
        { \
            :tests => \
            { \
            }, \
            { \
                :test_session => 1293823 \
            } \
        } \
    }

在这种情况下 :tests => {}, {} 不是有效的 Ruby 散列。您可以使用数组 :tests => [ {}, {} ]

顺便说一句,所有这些反斜杠都不是必需的,您还可以使用新的 ruby 哈希样式({test_session: 1293823} 而不是 {:test_session => 129823})更简洁地编写此代码,因此您的代码可能看起来像:

tcm = {
        tc: { 
              tests: [ 
                       { ... },
                       {
                          test_session: 1293823
                       }
                     ]
            }   
      }

我看到你漏了一个键的问题:

{ \
  :test_session => 1293823 \
} \

应该是

:some_key => { \
  :test_session => 1293823 \
} \

而且格式很奇怪。更好的是

tcm = {
  tc: {
    tests: {
      alpha_tests: {
        passing_tests: {},
        failing_tests: {
          alpha_test_1: { name: 'alpha_test_1', result: 'FAILED' },
          alpha_test_2: { name: 'alpha_test_2', result: 'FAILED' }
        }
      },
      beta_tests: {
        passing_tests: {
          beta_test_1: { name: 'beta_test_1', result: 'PASSED' }
        },
        failing_tests: {
          beta_test_2: { name: 'beta_test_2', result: 'FAILED' }
        }
      }
    },
    key_to_fix: {
      test_session: 1_293_823
    }
  }
}

puts tcm