0

考虑下面的简单代码:

post '/xxx' do
    puts params
end

这很好用。现在考虑以下修改

post '/xxx' do
    params = params
    puts params
end

现在参数为零!我是 Ruby 新手,不知道为什么会发生这种行为。显然我不想执行无用的params = params表达式,但我试图做一些更复杂的涉及修改的事情params,发现它总是变成nil.

4

1 回答 1

5

在第一个版本中,您正在调用一个被调用的方法params并将其返回值传递给puts.

在第二个版本中,您将创建一个名为params(隐藏同名方法)的局部变量并将其分配给自身。

考虑以下示例:

def foo
  1
end

p foo # outputs `1`

foo = foo

p foo # outputs `nil`

发生这种情况可能并不明显,因为在 Ruby 中访问局部变量和调用方法self看起来完全一样。

于 2013-07-13T22:20:05.833 回答