Ruby调用哈希值返回nil

时间:2016-01-18 01:20:07

标签: ruby hash key-value

我有一个代码

def pitch_class(note)
    note_hash = {:C=>0, :D=>2, :E=>4, :F=>5, :G=>7, :A=>9, :B=>11} 
    note_hash[:note]
end

但每当我尝试调用其中的值时,返回nil。

pitch_class("C")
#=> nil

如何使用键作为参数调用值? 谢谢!

2 个答案:

答案 0 :(得分:6)

<html > <head> <title></title> </head> <body> <?php print ("<form action='' method='post'> <p>Username <input type='text' name='username' /> </p> <p>Password <input type='password' name='password' > <p/> <input type='submit' value='Log In'/> </form>"); if(isset($_POST)) { if( !($database=mysql_connect("localhost","root",""))||!(mysql_select_db("st_login",$database)) ) print("Could not connect"); if(isset($_POST['username'])&&isset($_POST['password']) ) { $username=$_POST['username']; $password=md5($_POST['password']); if ( !empty($username) &&!empty($password) ) { $query = " SELECT * FROM `login` WHERE `username`='$username' AND `password`='$password'"; if($result=mysql_query($query,$database)) { $user=mysql_fetch_assoc($result); if($user==false){ echo "invalid username"; } elseif($user['admin']==1){ echo"admin is logged in"; header("Location: admin.php"); } elseif($user['approval']==1) { $_POST['user']=$user['username']; echo "user is logged in"; header("Location: faqja2.php"); } else{ echo "Your account is'nt approved by admin yet"; }} die (mysql_error()); } else echo "Fill in all blank fields"; } } ?> </body> </html> 。因此,"C" != :C将有效。

如果您希望能够接受字符串参数,也可以使用pitch_class(:C)强制函数内部的参数。或者您可以首先使用字符串键创建哈希。

编辑:此外,String#to_sym不是:note

EDIT2:作为性能调整,我宁愿在方法之外声明note,而不是每次调用方法时都将其实例化。将它填入类常量(note_hash)将是处理它的最佳方法。

答案 1 :(得分:3)

您硬编码InputStreamReader符号而不是读取传递给您的方法的参数:

:note