请考虑以下简单代码:
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.
在第一个版本中,您将调用一个方法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看起来完全一样.