2017-03-20 13 views
0

私は姓と名を持つユーザークラスを作成しています。あるサブクラスのインスタンス変数を別のサブクラスに使用する

class User 

    attr_accessor :first_name, :last_name 

end 

次に、私は知識を教えるための教師クラスを作成しました。

require_relative "./user.rb" 

class Teacher < User 

    attr_accessor :string1 

    def initialize 
    @string1 = string1 
    end 

    KNOWLEDGE = ["a String is a type of data in Ruby", "programming is hard, but it's worth it", "javascript async web request", "Ruby method call definition", "object oriented dog cat class instance", "class method class variable instance method instance variable", "programming computers hacking learning terminal", "bash Ruby rvm update certs"] 


    def teach 
    @string1 = KNOWLEDGE.sample 
    end 

end 

最後に、追加された機能を備えたユーザークラスと教師クラスの機能にアクセスするための学生クラスを作成しました。

require_relative "./user.rb" 
require_relative "./teacher.rb" 

class Student < User 

    attr_accessor :knowledge 

    def initialize 
    @knowledge = [] 
    end 

    def learn(string1) 
    @knowledge.push(@string1) 
    end 


end 

学生クラスは、@ variable1というインスタンス変数を取ってナレッジ配列にプッシュすることをお勧めします。どういうわけか、それは私がそれをすべきであるように動作していない。

また、私は学生と教師がいるこのbinファイルを持っています。それで知識配列を見ようとすると、応答しません!

#!/usr/bin/env ruby 
require_relative "../lib/user.rb" 
require_relative "../lib/teacher.rb" 
require_relative "../lib/student.rb" 

hima = Student.new 
hima.first_name = "Hima" 
hima.last_name = "Chhag" 

pooja = User.new 
pooja.first_name = "Pooja" 
pooja.last_name = "Jeckson" 

trushal = Teacher.new 
trushal.first_name = "Trushal" 
trushal.last_name = "Chitalia" 


some_knowledge = trushal.teach 

hima.learn(some_knowledge) 

puts "Hima just learned this important knowledge: '#{hima.knowledge[0]}' from Trushal" 

some_knowledge = trushal.teach 

hima.learn(some_knowledge) 

puts "Hima just learned this important knowledge: '#{hima.knowledge[1]}' from Trushal" 

hima.knowledge 

誰かが私のコードで何が問題なのかを知る手助けができたら本当に感謝します!

答えて

0

パラメータstring1ではなく、インスタンス変数@string1(評価はnil)を参照しています。

はこれを試してみてください:

def learn(string1) 
    @knowledge.push(string1) 
end 

また、あなたは「共有」インスタンス変数にしようとしているように見えます。しかし、定義上、インスタンス変数はオブジェクトの1つのインスタンスにのみ属します。しかしそれは問題ではありません。あなたのteach()メソッドは既に知識を返しています。それをあなたのlearn()メソッドで使用することができます。

+0

ありがとうございます。はい、あなたは正しいです。私はインスタンス変数を共有しようとしていました。しかし、あなたのポイントを得ました。 :-) –

関連する問題