修改Sinatra中预定义的'params'变量使其无效

Mar*_*cny 0 ruby sinatra

请考虑以下简单代码:

post '/xxx' do
    puts params
end
Run Code Online (Sandbox Code Playgroud)

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

post '/xxx' do
    params = params
    puts params
end
Run Code Online (Sandbox Code Playgroud)

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

geo*_*ock 5

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

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

请考虑以下示例:

def foo
  1
end

p foo # outputs `1`

foo = foo

p foo # outputs `nil`
Run Code Online (Sandbox Code Playgroud)

这种情况可能并不明显,因为Ruby在访问本地变量并调用方法时self看起来完全一样.