2012-06-08 67 views
0

請不要攻擊。以下是使我思考這個問題的例子和代碼。是一個變量的典型「指針」? params []是一個指針嗎? params []是一個變量嗎?

我正在研究紅寶石在軌道上,我是在MVC和params []運算符中。並已放下一些證明什麼,提醒在專用於鐵軌我的筆記本的封面內頁,反正

"So we don't just want to call tweet #1. Tweet.find(1) isn't enough." 
===> we need Tweet.find(params[:id]) 

params[:id] aka params = { :id => 1 } 

所以我不同部分標記,我的自信心,從哈希值。 「在1值,則:id爲關鍵,‘PARAMS’是....指針

是PARAMS指針它是一個變量

編輯:???是否有任何其他「變量」(缺乏一個更好的術語)接受:沒有值而不是參數的鍵?這是一種特殊類型的「容器」還是正常接受:沒有值的鍵 EDIT2:是否所有變量技術上都是指針?如果這是真的,那麼:哈希中的鍵在技術上也是指針?哈哈,如果這是真的,則參數是一個指向指針的指針,它聽起來正確。

回答

3

我不認爲你在這裏使用正確的術語。也許這將幫助:

  • PARAMS令牌是保存一些對象的引用變量名。
  • 從技術上講,params是一種方法,它返回對哈希對象的引用。
  • 實際上,您將params當作散列處理,因爲params.is_a?(Hash) == true
  • :id令牌是一個Symbol對象。
  • params[:id]:id是散列值的關鍵。

恕我直言,在Ruby中將對象視爲指針通常沒有用 - 除非您故意以某種原因使用它們。但是,在引擎蓋下,有很多間接層將C指針轉變爲運行時的Ruby對象。

+1

我不知道你是什麼意思,它是散列哈希,但我認爲你是錯的。它只是一個散列,它的值是任何類型的對象,字符串,fixnum,數組或散列。 –

+0

典型的rails應用程序中的'params'總是包含非哈希值,即'controller'和'action'。你的陳述是誤導性的,恕我直言。 –

+0

'params'實際上是一個返回對'HashWithIndifferentAccess'(它的子類'Hash')的引用的方法。 –

0

params是來自HTTP要求

+0

oohh。參數在哪裏去?在「路徑」(URI)中?大概。他們可以去(來自)其他地方嗎? –

+0

這取決於。在像widgets/1 params [:id]這樣的獲取請求將是在URL中傳遞的1。或者他們可能因爲這些請求而被送出或張貼。更進一步:id是一個像字符串一樣的符號,但它是一個單例,它只在內存中有一個地址,所以它們在ruby/rails中被用作鍵 – DVG

+0

但是URL不允許使用分號。 。對? –

0

params是一種返回散列引用的方法。

(但一般來說它稱爲「的params散列」,而不是「params[]經營者」。)

哈希值可以使用的符號,以及其它數據類型,作爲哈希鍵:

[1] pry(main)> h = Hash.new 
=> {} 
[2] pry(main)> h[:foo] = 42 
=> 42 
[3] pry(main)> h[42] = :foo 
=> :foo 
[4] pry(main)> h 
=> {:foo=>42, 42=>:foo} 
[5] pry(main)> h[h[:foo]] 
=> :foo 

我不確定「接受:keys沒有值」是什麼意思。

符號也可以用其他方式使用,例如,指的是一種方法。限定before_filter時的一個例子是:

class UsersController < ApplicationController 

    before_filter :init 

    def index 
    # etc 
    end 

    private 

    def init 
     # Does some stuff 
    end 
end 

before_filter方法以一個符號指示調用一個動作之前運行的方法。

符號是不是引用,它們是符號,並且自己評估。請參閱this SO question

+0

'params'是一種方法,*返回一個哈希引用(HashWithIndifferentAccess實際上)。 –

+0

@ muistooshort更新!衛生署! –

相關問題