Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中使用哈希值_Ruby - Fatal编程技术网

如何在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 =

我编写了一个小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
班级学院
@@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
。你的层次结构很奇怪。不要使用链接来存储显示输出的页面。链接先腐烂后断裂。相反,将输出放入问题的文本中。读作“及”。