2015-08-14 53 views
0

我有以下代碼創建一個維京遊戲角色,併爲他們提供隨機統計信息,如健康狀況,年齡和力量。在類中的方法中訪問變量,在該類之外

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

您確定要放置ruby-on-rails標記嗎?如果你想在數據庫中保存東西,你應該使用Active Record來代替。 –

+0

你已經有了解決方案:「brad.age」即使不起作用,因爲它不是一種方法「 - 所以一定要! –

回答

3

使用attr_accessor :name, :health, :age, :strength如果您想變量是可讀可寫或attr_reader :name, :health, :age, :strength,如果你想他們是隻讀的。

在此之後,您可以通過brad.varnamebrad.name等...

[Documentation]

1

使用​​,所以你可以簡單地使用brad.age,同樣適用於其他變量

0

使用attr_reader方法,它創建一個屬性的方法,以指向在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!" 
相關問題