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

时间:2013-07-13 22:13:36

标签: ruby sinatra

考虑以下简单代码:

post '/xxx' do
    puts params
end

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

考虑以下示例:

def foo
  1
end

p foo # outputs `1`

foo = foo

p foo # outputs `nil`

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