Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveSupport::Concern中的实例变量_Ruby On Rails_Ruby_Activesupport - Fatal编程技术网

Ruby on rails ActiveSupport::Concern中的实例变量

Ruby on rails ActiveSupport::Concern中的实例变量,ruby-on-rails,ruby,activesupport,Ruby On Rails,Ruby,Activesupport,我已经读到ruby中的模块(在本例中为ActiveSupport::Concern)在初始化的类的所有实例中共享。所以,如果这是真的,则意味着任何实例变量都将在内存中的所有实例之间共享 module SetPassword extend ActiveSupport::Concern attr_reader :password def password=(new_password) @password = new_password self.crypted_passwo

我已经读到ruby中的模块(在本例中为ActiveSupport::Concern)在初始化的类的所有实例中共享。所以,如果这是真的,则意味着任何实例变量都将在内存中的所有实例之间共享

module SetPassword
  extend ActiveSupport::Concern
  attr_reader :password
  def password=(new_password)
    @password = new_password
    self.crypted_password = password_digest(new_password, salt)
  end
end

class User
  include SetPassword
end

u = User.new; u.password = 'abcdef'
u2 = User.new; u2.password = '123456'
上述代码使用安全吗?或者第二个用户会覆盖第一个用户吗?

正在进行呼叫。这意味着,不共享任何内容,这可能很容易检查(
ActiveSupport::Concern
与要检查的代码无关。)

他在幕后打电话。这意味着,不共享任何内容,这可能很容易检查(
ActiveSupport::Concern
与要检查的代码无关。)


“因此,如果这是真的,则意味着任何实例变量都将在内存中的所有实例之间共享。”这是不正确的。试一试。另外请注意,您的示例中有输入错误,最后一行应该是
u2.password='123456'
(而不是
u.password='123456'
)。因此,如果这是真的,则意味着任何实例变量都将在内存中的所有实例之间共享。“这是不正确的。”。试一试。另外请注意,您的示例中有输入错误,最后一行应该是
u2.password='123456'
(而不是
u.password='123456'
module SetPassword
  attr_reader :password
  def password=(new_password)
    @password = new_password
    puts <<~EOS
    Setting password to: #{@password} (id: #{@password.__id__}).
    Object: #{self.class.name} (#{self.__id__}).
    Method: #{__callee__} on #{self.method(__callee__).__id__}.
    EOS
  end 
end

class User
  include SetPassword
end

u1 = User.new; u1.password = 'abcdef'
u2 = User.new; u2.password = '123456'
▶ u1 = User.new; u1.password = 'abcdef'
#⇒ Setting password to: abcdef (id: 46968741459360).
#  Object: User (46968741459420).
#  Method: password= on 46968741459040.

▶ u2 = User.new; u2.password = '123456'
#⇒ Setting password to: 123456 (id: 46968734231740).
#  Object: User (46968734232020).
#  Method: password= on 46968734230640.