2010-07-11 74 views
1

即时通讯红宝石和铁轨。红宝石类声明

在RoR3控制器从ActionController::Base

request.env["SERVER_ADDR"] 

继承所以请求是在基类的方法(即在ActionController的模块内)?

是什么env然后和["SERVER_ADDR"]

将是巨大的,如果有人能做出一点点的代码示例...这将是非常有益的理解!

谢谢!

回答

1
request.env["SERVER_ADDR"] 
  1. request要么

    一个。提领本地变量request

    b。不带参数发送消息:request隐式接收机self

  2. env不带参数的对象而获得通过解引用request在步骤2中发送消息:env或物体返回响应于发送该消息:requestself
  3. ["SERVER_ADDR"]与参数"SERVER_ADDR"响应返回到在步骤2和
  4. "SERVER_ADDR"发送消息:env对象发送消息:[]是文字的字符串。

你可以更明确地写出这样的:

self.request.env.[]("SERVER_ADDR") 

或更明确的是这样的:

self.request().env().[]("SERVER_ADDR") 

甚至全员出动:

self.send(:request).send(:env).send(:[], "SERVER_ADDR") 
+0

很好的解释! +2! :) 1无敌点 – 2010-07-11 17:05:45

1

request.env["SERVER_ADDR"]也可以写为request().env()["SERVER_ADDR"]。所以env是一个名叫未经request()返回的对象上的参数,然后调用[]通过与参数"SERVER_ADDR"返回的对象上的方法。

+0

但为什么不()... request()。env()。[“SERVER_ADDR”] – 2010-07-11 16:17:09

+0

因为'foo [ba r]'比'foo。[bar]'更好读写,所以ruby的创建者决定调用'[]'的语法应该是前者。 – sepp2k 2010-07-11 16:21:49