我有以下代码可以创建一个维京游戏角色,并为他们提供随机数据,如健康,年龄和力量。
class Viking
def initialize(name, health, age, strength)
@name = name
@health = health
@age = age
@strength = strength
end
def self.create_warrior(name)
age = rand * 20 + 15
health = [age * 5, 120].min
strength = [age/2, 10].min
Viking.new(name, health, age, strength)
end
end
brad = Viking.create_warrior("Brad")
puts "New Warrior Created!"
create_warrior函数返回所有这些值,但是如何访问它们以便我可以看到统计信息。
例如,这不起作用,但我希望看到新维京布拉德的年龄或健康状况(即brad.age
,即使这不起作用,因为它不是方法)。
那么如何访问这些变量(不将它们设为全局变量)。
答案 0 :(得分:3)
如果您希望变量既可读又可写,请使用attr_accessor :name, :health, :age, :strength
;如果您希望变量只读,请使用attr_reader :name, :health, :age, :strength
。
在此之后,您可以使用brad.varname
访问,例如brad.name
等......
答案 1 :(得分:1)
使用attr_reader :age
,因此您只需使用brad.age
,其他变量也是如此
答案 2 :(得分:1)
如果您真的不想让它们全球化,请尝试instance_variable_get
方法http://apidock.com/ruby/Object/instance_variable_get
puts brad.instance_variable_get(:@age)
答案 3 :(得分:0)
使用initialize
方法,它创建一个属性方法,指向attr_writer
方法中的私有变量。其只读
您可以使用attr_accessor
仅写
class Viking
attr_reader :age, :name, :health, :strength
def initialize(name, health, age, strength)
@name = name
@health = health
@age = age
@strength = strength
end
def self.create_warrior(name)
age = rand * 20 + 15
health = [age * 5, 120].min
strength = [age/2, 10].min
Viking.new(name, health, age, strength)
end
end
brad = Viking.create_warrior("Brad")
puts "New Warrior Created!"
同时读取和写入
ByteSource