将符号赋值给变量的结果为零

Gab*_*ker 0 ruby symbols

我试图一个符号分配给一个变量,并传递到一个函数,但它似乎不分配,我得到的nil,而不是

  logger.info @payload['branch_name']
  logger.info @payload['branch_name'].to_sym
  branch_name = @payload.has_key? 'branch_name' ? @payload['branch_name'].to_sym : false;
  logger.info branch_name
Run Code Online (Sandbox Code Playgroud)

结果是:

[2015-02-18T12:53:01.237082 #6]  INFO -- : develop
[2015-02-18T12:53:01.237154 #6]  INFO -- : :develop
[2015-02-18T12:53:01.237234 #6]  INFO -- : nil
Run Code Online (Sandbox Code Playgroud)

但我原以为它会将符号赋给变量?

Mat*_*att 5

由于运算符优先级(例如,?之前评估了三元运算符has_key?),您需要修复括号.试试这个:

branch_name = @payload.has_key?('branch_name') ? @payload['branch_name'].to_sym : false;
Run Code Online (Sandbox Code Playgroud)

可以使用以下示例代码段重现该行为:

a = { 2 => 2 }
=> {2=>2}
a.has_key?­ 1 ? 2 : 3 # 1 evalutes to true, which reduces into a.has_key?(2)
=> true
Run Code Online (Sandbox Code Playgroud)