5
我在軌道控制器操作下面的代碼序列。按照預期,在IF之前,PARAMS包含請求參數。之後,參數是零。任何人都可以請解釋這裏發生了什麼?在rails中分配/替換參數哈希
if false
params = {:user => {:name => "user", :comment => 'comment'}}
end
謝謝。
我在軌道控制器操作下面的代碼序列。按照預期,在IF之前,PARAMS包含請求參數。之後,參數是零。任何人都可以請解釋這裏發生了什麼?在rails中分配/替換參數哈希
if false
params = {:user => {:name => "user", :comment => 'comment'}}
end
謝謝。
包含請求參數的params
實際上是一個方法調用,它返回一個包含參數的散列。您的params =
行將分配給一個名爲params
的本地變量。
的if false
塊之後,紅寶石已經看到了當地params
變量,所以當你指的params
在局部變量的優先級高於調用同名的方法,該方法後。但是,因爲您的params =
分配在if false
塊內,所以本地變量永遠不會分配值,因此本地變量爲nil
。
如果您嘗試分配給前指一個局部變量,你會得到一個NameError:
irb(main):001:0> baz
NameError: undefined local variable or method `baz' for main:Object
from (irb):1
但是如果有一個分配給這不是在代碼執行路徑,然後紅寶石變量已創建局部變量,但其值爲nil
。
irb(main):007:0> baz = "Example" if false
=> nil
irb(main):008:0> baz
=> nil
「Ruby已經看到了本地參數」真的,Ruby?真!!!??? O_o(對不起,但是這花了我幾天的時間......看到沒有執行,是嗎?) – steffen 2017-04-12 11:25:25