2016-03-10 124 views
0

我寫了一個小的Ruby程序,但無法訪問存儲在父類中的哈希值。如何在ruby中使用哈希值

下面是代碼:

class College 
    @@dep = ["cs" => 60000, "mat" => 20000, "che" => 30000] 
end 

class Student < College 
    def get_det 
    puts "Enter name... \n" 
    @name = gets 
    puts "Enter department...\n" 
    @dpt = gets 
    end 

    def set_fee 
    case @dpt 
    when "cs" 
     @fee = (@@dep["cs"]).to_i 
    when "mat" 
     @fee = @@dep["mat"].to_i 
    when "che" 
     @fee = @@dep["che"].to_i 
    else 
     puts "Eror!!!" 
    end 
    end 

    def print_det 
    puts "Name : #{@name}" 
    puts "Department : #{@dpt}" 
    puts "Course fee : #{@fee}" 
    end 
end 

det = Student.new 

det.get_det 
det.set_fee 
det.print_det 

我得到的輸出:

Output:

+0

你想'@name = gets.chomp'和'@dpt = gets.chomp'。如果用戶輸入'「Bubba」,然後返回,'gets'返回'「Bubba \ n」'。 'chomp'打斷''\ n「'。如果你不'chomp','@ dpt'將不會在case語句中匹配。 –

+0

'gets'也會保留新行,所以使用@Cary建議的'String#chomp'。另外'Sudent#set_fee'可以簡化爲'@@ dep [@dpt] .to_i'。你的層次結構很奇怪。 – ndn

+0

請勿使用鏈接來存儲顯示輸出的頁面。鏈接腐然後中斷。而是將輸出放入問題的文本中。閱讀「[問]」和「[mcve]」。 –

回答

2

你已經爲@@dep變量作爲數組,而不是作爲一個哈希值。您需要{ }更換[ ],就像這樣:

@@dep = {"cs" => 60000, "mat" => 20000, "che" => 30000} 

然後你就可以通過字符串鍵來訪問你的哈希值:

@@dep['cs'] # Will return 6000 

而只是一個僅供參考,您的set_fee方法可被重構爲:

def set_fee 
    @fee = @@dep[@dpt] || 'Error!' 
    puts @fee 
end 

既然你只是傳入你正在檢查的值爲你的每個when聲明,您可以直接將該值傳遞給您的@@dep對象。而且你不需要to_i,因爲你的散列值已經是整數。

+0

謝謝......這有效...... –

+0

太棒了!很高興它爲你工作。 :-) – jeffdill2