关于 Ruby 局部变量和 instance/class 变量的作用域?
About scope in Ruby local and instance/class variables?
我有一个正在处理的模拟脚本:
def winner_client
clients = [@client1, @client2, @client3]
@winner = clients.find { |drunkest| drunkest.drunk == 3 }.name
puts "#{@winner} is too drunk!"
Bouncer.kick(@winner)
end
end
在 winner_client
方法中,我希望 clients
数组在 class 级别工作,以便我可以在其他方法中使用它。但是如果我这样做:
class OpenBar
@@clients = [@client1, @client2, @client3]
def initialize
#...
当我调用 winner_client
方法时它引发
KatzBar.rb:57:in block in winner_client': undefined method drunk' for nil:NilClass (NoMethodError)
我该如何解决这个问题?
如果你想定义 clients
以便它在多种方法中可用,你可以使它本身成为一个方法...
def clients
[@client1, @client2, @client3]
end
这将使它可用于同一实例的所有方法。
如果您希望它适用于所有实例,那是另一个问题,但仍然有可能。创建一个 class 方法来设置和获取您的客户...
def self.clients=(array)
@@clients = array
end
def self.clients
@@clients
end
当你在一个实例中有一个方法时,你可以用...保存客户
OpenBar.clients = [@client1, @client2, @client3]
在不同的实例中,您可以使用...
OpenBar.clients
我有一个正在处理的模拟脚本:
def winner_client
clients = [@client1, @client2, @client3]
@winner = clients.find { |drunkest| drunkest.drunk == 3 }.name
puts "#{@winner} is too drunk!"
Bouncer.kick(@winner)
end
end
在 winner_client
方法中,我希望 clients
数组在 class 级别工作,以便我可以在其他方法中使用它。但是如果我这样做:
class OpenBar
@@clients = [@client1, @client2, @client3]
def initialize
#...
当我调用 winner_client
方法时它引发
KatzBar.rb:57:in block in winner_client': undefined method drunk' for nil:NilClass (NoMethodError)
我该如何解决这个问题?
如果你想定义 clients
以便它在多种方法中可用,你可以使它本身成为一个方法...
def clients
[@client1, @client2, @client3]
end
这将使它可用于同一实例的所有方法。
如果您希望它适用于所有实例,那是另一个问题,但仍然有可能。创建一个 class 方法来设置和获取您的客户...
def self.clients=(array)
@@clients = array
end
def self.clients
@@clients
end
当你在一个实例中有一个方法时,你可以用...保存客户
OpenBar.clients = [@client1, @client2, @client3]
在不同的实例中,您可以使用...
OpenBar.clients