Ruby 请教个 hash 形参的弱问题

leopku · 2013年08月09日 · 最后由 blackanger 回复于 2013年08月10日 · 2862 次阅读

现有一函数 a,需要 hash 形式的参数

def a(options={})
  blabla # 
end

又有一函数 b 需要调用 a

def b(opt={}) #
  a(opt) ## 这里如何写? 直接写opt报错
end

调用 b

b({:a => '11', :b => '22'}) #这里的参数接是a需要的hash,会直接传给a

方法名是小写,另外那个 blabla 是什么意思

#1 楼 @zlfera 谢谢,已修正 blablabla 你就当成 some thing,无所谓他的具体内容。

@leopku 直接传就好了...

匿名 #5 · 2013年08月09日

实测一切正常。不知道你那里出现什么错误?

irb(main):027:0> def a(opt={}) irb(main):028:1> puts opt.to_s irb(main):029:1> end => nil irb(main):030:0> def b(opt2={}) irb(main):031:1> a(opt2) irb(main):032:1> end => nil irb(main):033:0> dic = {:abc=> 1,:cde => 2} => {:abc=>1, :cde=>2} irb(main):034:0> b(dic) {:abc=>1, :cde=>2} => nil irb(main):035:0> b({:a=> '11',:b => '22'}) {:a=>"11", :b=>"22"} => nil irb(main):036:0>

多谢楼上各位 被两个问题整晕了 一是 hash 参数 在非最后一个位置时省略了花括号 二是 RestClient 传参

一并多谢 @jasl @ 蓬蒿人 @Karma 等在 Q 群里的热心解答

@leopku 如果是 Ruby2.0, 请使用关键字参数:

hash = {a:1, b:1}
def foo(**hash)
  puts hash.inspect
end

def bar(**hash)
  foo(hash)
end
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册