在Hartl的Rails教程(第5条,第8.2.3节)中,为什么可以在没有@的情况下调用方法中定义的实例变量?

问题描述 投票:1回答:1

当我遇到下面列出的这段令人困惑的代码时,我是一名新手,正在通过Hartl的Rails 5教程工作。看起来@current_user在方法内被定义为实例变量,因此可以在方法外使用。但是,在login_in?方法,不需要@符号来调用它。实际上,如果我添加重写login_in?使用@current_user,它将不再按预期工作!

module SessionsHelper

  # Logs in the given user.
  def log_in(user)
    session[:user_id] = user.id
  end

  # Returns the current logged-in user (if any).
  def current_user
    if session[:user_id]
      @current_user ||= User.find_by(id: session[:user_id])
    end
  end

  # Returns true if the user is logged in, false otherwise.
  def logged_in?
    !current_user.nil?
  end
end

当我在ruby中尝试时,我无法以这种方式使用实例变量。我尝试的示例如下。当我调用method2时,直到在var1前面添加@符号之前,我都无法解决错误。谁能帮我理解这一点?谢谢!!

def method1
    @var1 = 2
    @var1
end

def method2
    @var1 == 2
end

puts method1
puts method2

当我遇到下面列出的这段令人困惑的代码时,我是一名新手,正在通过Hartl的Rails 5教程工作。看起来@current_user在方法中定义为实例...

ruby-on-rails methods instance-variables
1个回答
0
投票

current_user被定义为方法,然后在该方法内部定义了实例变量@current_user,仅在该方法内部使用。 logged_in?方法正在调用current_user方法,而不是直接访问@current_user变量。请注意,在ruby中,@$@@实际上是变量名的一部分,而不是修饰符

© www.soinside.com 2019 - 2024. All rights reserved.