2016-05-25 32 views
0

四面观望,无法找到正确答案来解决我面临的问题。我想访问并检查一个哈希值内的值。代码如下...访问并检查散列内的值

class Bank 

    class AccountMaker 
     attr_accessor :account_number, :name, :balance, :pin 

     def initialize(account_number, name, balance, pin) 
      @account_number = account_number 
      @name = name 
      @balance = balance 
      @pin = pin 
     end 
    end 

    attr_accessor :int_account_number, :int_account_pin 

    def initialize 
     @accounts = {} 
     @int_account_number = int_account_number 
     @int_account_pin = int_account_pin 
    end 

    def add_account(account_number, name, balance, pin) 
     @accounts[account_number] = AccountMaker.new(account_number, name, balance, pin) 
    end 

    def login_screen 

     def account_number_login 
      puts "Please enter your 7 digit account number." 
      account_number = gets.chomp 
      int_account_number = account_number.to_i 

      if @accounts.has_key?(int_account_number) and (/^\w{7}$/ === account_number) 
       thank_you_msg() 
       pin_login(int_account_number) 
      else 
       error_msg() 
       account_number_login() 
      end 
     end 

     def pin_login(int_account_number) 
      puts "Please enter your 4 digit pin." 
      account_pin = gets.chomp 
      int_account_pin = account_pin.to_i #May have to use this later 

      #puts int_account_number, int_account_pin #Used to check if variables come through 

      if (What Should go here?) == int_account_pin #(/^\d{4}$/ === account_pin) 
       thank_you_msg 
       main_menu() 
      else 
       error_msg() 
       pin_login(int_account_number) 
      end 
     end 

     account_number_login() 
    end 

    def main_menu  
    end 

end 

我的问题是如何访问针的哈希值用户inputed账号(键)并检查它是否在用户输入相匹配?哈希值包含在pin下的值,但我在尝试访问和比较时遇到了最困难的时间。

回答

1

我的问题是如何访问针的哈希值的 用户inputed账号(键)并检查它是否在用户 条目匹配?哈希值包含:pin下的值,但我最难尝试访问并对其进行比较。

像这样:

@accounts[int_account_number].pin 

片段:

@accounts[int_account_number] 

是AccountMaker实例。而且,一个AccountMaker实例有一个名为pin()的getter方法(以及命名pin=()的setter方法):

          Declared right there! 
                | 
class AccountMaker         V 
    attr_accessor :account_number, :name, :balance, :pin 

但是,需要你的代码进行重组 - 从缩进:红宝石缩进为2 spaces- - 不是1个空格,而不是4个空格。如果你愿意,你可以缩进ruby代码7个空格 - 但不要指望任何人在公共论坛上发帖时帮助你。所以,你的第一个任务是将你的所有代码重新缩进2个空格。

接下来,摆脱您的嵌套类:将其移动到顶层并将其重命名为Account。类名不是动词 - 它们是名词。方法是动词。

然后,摆脱所有嵌套的def's - 嵌套def最有可能不像你想象的那样工作。相反,所有的def应该被定义在世行的顶层。

+0

真棒我欣赏的帮助和所有的信息。如果它不明显,我是新来的Ruby。再次感谢 – JCD