大家感兴趣的东西来了---Collecting Hash Arguments
一切都来源于Hash,使用 Hash Object 作为 Arguments,例如:
def test(a,b)
#...
end
我们可以这样用:
test("hi",{"no1"=>"good",
"no2"=>"bad"})
这里的括号让人看的很不舒服,ruby允许在调用method的时候,去掉hash object的括号:
test("hi","no1"=>"good","no2"=>"bad")
注意不要被表明的东西迷惑,这里并没有3个arguments,而是2个,所有的类似表达于 a=>b 都会被收集起来,作为一个hash object
其实大家喜欢使用 symbol object 作为 key,这样,我们在Rails中常见的method就出现了:
find(:all,:limit=>5,:order="id desc")
为了说明问题,这里特别举例:
def test(opts={})
"#{opts[:name]}---#{opts[:des]}"
end
puts test(:name=>‘kc‘,:des=>‘I like ruby‘)
puts test(:des=>‘I like ruby‘,:name=>‘kc‘)
结果:
kc---I like ruby
kc---I like ruby
这个例子给我们提供了一个清晰的映象,更加要注意的是,hash 中的 key-value 对交换顺序,结果也一样,这就说明了,当参数为hash object 时,我们可以不考虑顺序问题
联系客服