有一个更好的方法吗?(看起来很笨重)
form_params = {}
form_params['tid'] = tid
form_params['qid'] = qid
form_params['pri'] = pri
form_params['sec'] = sec
form_params['to_u'] = to_u
form_params['to_d'] = to_d
form_params['from'] = from
form_params['wl'] = wl
Run Code Online (Sandbox Code Playgroud)
Sch*_*jer 20
form_params = { "tid" => tid, "qid" => qid }
Run Code Online (Sandbox Code Playgroud)
或者你可以做到
form_params = Hash["tid", tid, "qid", qid] #=> {"tid"=>tid, "qid"=>qid}
form_params = Hash["tid" => tid, "qid" => qid] #=> {"tid"=>tid, "qid"=>qid}
form_params = Hash[tid => tid, qid => qid] #=> {"tid"=>tid, "qid"=>qid}
Run Code Online (Sandbox Code Playgroud)
(nb.最后一个是1.9的新内容,它使你的关键符号而不是字符串)
{tid:tid,qid:qid}
键和值成对出现,因此必须有偶数个参数.
稍微修改上面的内容,因为你的例子有字符串键:
form_params = {}
%w(tid qid pri sec to_u to_d from wl).each{|v| form_params[v] = send(v)}
Run Code Online (Sandbox Code Playgroud)
如果性能不重要,这个可能看起来更好:
form_params = {}
['tid', 'qid', 'pri', 'sec', 'to_u', 'to_d', 'from', 'wl'].each do |v|
form_params[v] = eval(v)
end
Run Code Online (Sandbox Code Playgroud)
如果这些名称实际上是方法,您可以用eval更快的方式替换send:
form_params[v] = send(v.to_sym)
Run Code Online (Sandbox Code Playgroud)
(更新)使用的另一种(更优雅)方式inject:
form_params = ['tid', 'qid', 'pri', 'sec', 'to_u', 'to_d', 'from', 'wl'].inject({}) { |h, v| h[v] = send(v); h }
Run Code Online (Sandbox Code Playgroud)