变量是典型的“指针”吗? params []是指针吗? params []是变量吗?

时间:2012-06-08 00:49:08

标签: ruby-on-rails ruby variables pointers params

请不要攻击。以下是让我思考这个问题的示例和代码。

我在轨道上研究ruby,我正处于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以外的值的键?这是一种特殊类型的“容器”还是只接受:没有值的键是正常的 EDIT2:所有变量在技术上都是指针吗?如果这是真的,那么:哈希技术指针内部的键也是如此?哈哈,如果这是真的,那么params就是一个指向指针的指针,听起来是正确的。

3 个答案:

答案 0 :(得分:3)

我认为你在这里没有使用正确的术语。也许这会有所帮助:

  • params 标记是一个变量名,用于保存对某个对象的引用。
  • 从技术上讲, params 是一个返回对Hash对象的引用的方法。
  • 在实践中,您将params视为哈希,因为params.is_a?(Hash) == true
  • :id标记是一个Symbol对象。
  • params[:id]中:id是哈希值的关键字。
恕我直言,将Ruby中的对象视为指针通常没有用 - 除非你出于某种原因故意以这种方式使用它们。但是,在引擎盖下有很多间接层,可以在运行时将C指针转换为Ruby对象。

答案 1 :(得分:0)

params是来自HTTP请求的变量哈希

答案 2 :(得分: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