为什么Ruby不会在同一个类中混淆不同方法中的两个实例变量?

时间:2014-02-04 10:53:02

标签: ruby-on-rails ruby

class Order < ApplicationController

  def new
    @project = Project.new
  end

  def show
    @project = Project.find(params[:id])
  end
end

那么为什么Ruby / Rails不会在同一个类中的两个不同方法中与相同的实例变量混淆呢?

4 个答案:

答案 0 :(得分:2)

作为Rails控制器,在浏览器请求/new/show时调用它。对于每个请求,都会创建一个新的控制器类实例。因此,newshow将被执行,但不会同时执行。

答案 1 :(得分:1)

因为创建了一个新的类实例来处理每个请求。

[编辑]:如果您要使用另一种名为Order#do_stuff_with_project的方法,则可以从Order#showOrder#new调用它,并且可以访问@project变量。它们是简单的方法,没什么神奇的。

或者你可以这样说:按照惯例,两个方法永远不会在同一个控制器实例上调用。这是temporal coupling的一个例子。

答案 2 :(得分:0)

无论何时刷新页面,都会向控制器发送请求,然后再次对其进行初始化。

答案 3 :(得分:0)

实例方法仅在instance of an object

中调用

对象的实例是在加载/调用/初始化时,意味着实例变量只能在加载特定对象时使用