0

攻撃しないでください。これについて私に考えさせた例とコードは次のとおりです。

私はレール上のルビーを勉強しており、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 はポインタですか? 変数ですか?

編集: params 以外の値のない :keys を受け入れる他の「変数」(より適切な用語がないため) はありますか? これは特別なタイプの「コンテナ」ですか、それとも値なしで :keys を受け入れるのが普通ですか? EDIT2: すべての変数は技術的にポインタですか? これが真の場合、ハッシュ内の :keys も技術的にポインターですか? これが本当なら、params はポインターを指しているポインターであり、ほぼ正しいように聞こえます。

4

3 に答える 3

3

ここで正しい用語を使用しているとは思いません。多分これは役立つでしょう:

  • paramsトークンは、あるオブジェクトへの参照を保持する変数名です。
  • 技術的には、paramsはHashオブジェクトへの参照を返すメソッドです。
  • 実際には、パラメータをハッシュとして扱いますparams.is_a?(Hash) == true
  • :idトークンはSymbolオブジェクトです。
  • :idはparams[:id]、ハッシュ値のキーです。

私見ですが、Rubyのオブジェクトをポインタと考えるのは一般的に有用ではありません。ただし、何らかの理由で意図的にそのように使用している場合を除きます。しかし、はい、内部には、実行時にCポインターをRubyオブジェクトに変換する間接参照のレイヤーがたくさんあります。

于 2012-06-08T01:15:40.797 に答える
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メソッドは、アクションを呼び出す前に実行するメソッドを示すシンボルを取ります。

シンボルは参照ではなく、シンボルであり、それ自体に評価されます。このSOの質問を参照してください。

于 2012-06-08T01:13:20.373 に答える
0

params は、HTTP リクエストで渡された変数のハッシュです

于 2012-06-08T00:53:53.557 に答える