2009-08-26 52 views
5

我在軌道控制器操作下面的代碼序列。按照預期,在IF之前,PARAMS包含請求參數。之後,參數是零。任何人都可以請解釋這裏發生了什麼?在rails中分配/替換參數哈希

if false 
    params = {:user => {:name => "user", :comment => 'comment'}} 
end 

謝謝。

回答

10

包含請求參數的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 
+0

「Ruby已經看到了本地參數」真的,Ruby?真!!!??? O_o(對不起,但是這花了我幾天的時間......看到沒有執行,是嗎?) – steffen 2017-04-12 11:25:25