2010-07-11 76 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