如何在ruby中使用哈希值
我编写了一个小Ruby程序,但无法访问父类中存储的哈希值 代码如下:如何在ruby中使用哈希值,ruby,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 =
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
班级学院
@@dep=[“cs”=>60000,“mat”=>20000,“che”=>30000]
结束
班级学生<学院
def get_det
放入“输入名称…”\n
@name=get
放入“进入部门…\n”
@dpt=get
结束
def设置费
案例@dpt
当“cs”
@费用=(@@dep[“cs”])。给
当“垫”
@费用=@@dep[“mat”]。\u i
当“切”
@费用=@@dep[“che”]。\u i
其他的
放上“厄罗!!!”
结束
结束
def打印数据
放置“名称:#{@Name}”
放入“部门:{@dpt}”
放入“课程费:{@fee}”
结束
结束
det=Student.new
去吧,去吧
详细设置费
数据打印
我得到的输出是:
您已将
@@dep
变量定义为数组,而不是散列。您需要将[]
替换为{}
,如下所示:
@@dep = {"cs" => 60000, "mat" => 20000, "che" => 30000}
然后,您可以通过字符串键访问哈希值:
@@dep['cs'] # Will return 6000
仅供参考,您的set\u fee
方法可以重构为:
def set_fee
@fee = @@dep[@dpt] || 'Error!'
puts @fee
end
由于您只是在为每个
when
语句传入您要检查的值,因此您可以直接将该值传递给@@dep
对象。您不需要来_i
,因为散列中的值已经是整数。您需要@name=gets.chomp
和@dpt=gets.chomp
。如果用户输入“Bubba”
,然后输入return,获取返回“Bubba\n”
chomp
lops关闭“\n”
。如果您不chomp
,@dpt
将永远不会在case语句中匹配。gets
也将保留新行,因此按照@Cary的建议使用String\chomp
。另外,Sudent#set_fee
可以简化为@@dep[@dpt]。to_i
。你的层次结构很奇怪。不要使用链接来存储显示输出的页面。链接先腐烂后断裂。相反,将输出放入问题的文本中。读作“及”。