访问类中方法之外的方法中的变量

时间:2015-08-14 16:21:20

标签: ruby class variables object

我有以下代码可以创建一个维京游戏角色,并为他们提供随机数据,如健康,年龄和力量。

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,即使这不起作用,因为它不是方法)。

那么如何访问这些变量(不将它们设为全局变量)。

4 个答案:

答案 0 :(得分:3)

如果您希望变量既可读又可写,请使用attr_accessor :name, :health, :age, :strength;如果您希望变量只读,请使用attr_reader :name, :health, :age, :strength

在此之后,您可以使用brad.varname访问,例如brad.name等......

[Documentation]

答案 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