考虑以下简单代码:
post '/xxx' do
puts params
end
这很好用。现在考虑以下修改
post '/xxx' do
params = params
puts params
end
现在params是零!!我是Ruby的新手,并且不知道为什么会出现这种情况。显然我不想执行无用的params = params
表达式,但我试图做一些更复杂的事情,包括修改params
并发现它总是变为nil
。
答案 0 :(得分:5)
在第一个版本中,您正在调用一个名为params
的方法,并将其返回值传递给puts
。
在第二个版本中,您正在创建一个名为params
的局部变量(隐藏具有相同名称的方法)并将其分配给自身。
考虑以下示例:
def foo
1
end
p foo # outputs `1`
foo = foo
p foo # outputs `nil`
这种情况可能并不明显,因为在Ruby中访问局部变量并在self
上调用方法看起来完全一样。