在ruby代码中将参数作为param = {}传递

时间:2014-05-16 04:16:27

标签: ruby-on-rails ruby

对ruby不熟悉并开始学习ruby概念

从下面的代码段我只想知道为什么将params = {}作为参数传递 我不明白分配params={} ..这是什么意思?

def go_to_print_options(params = {})
  if 'short' == params['flow']
    short_flow_to_print_options(params)
  else
    params[:mobile] ? print_options(params) :flow_to_print_options(params)
  end
end

这个checkinh的含义是if 'short' == params['flow']

2 个答案:

答案 0 :(得分:4)

作为方法参数的params={}表示您可以在方法调用时发送变量参数hash作为参数。如果没有传递参数,则将其视为空哈希,默认情况下为

因此,对于上述方法,您可以致电go_to_print_options(flow: 'short', mobile: 'apple') 你可能想知道这不是hash;但是有一个问题 - 如果Hash是函数调用中的最后一个参数,则可以跳过花括号

如此有效,对于您的方法: go_to_print_options(flow: 'short', mobile: 'apple')go_to_print_options({flow: 'short', mobile: 'apple'})相同。
在函数定义中,{flow: 'short', mobile: 'apple'}映射到params

params[:flow] #=> 'short'
params[:mobile] #=> 'apple'
params[:foo] #=> nil #since no such key is present

请注意,这些是上面的符号,您可以将字符串作为键传递:go_to_print_options("flow" => 'short', "mobile" => 'apple')

如果您只是致电go_to_print_options。它仍然有效,params将是一个空哈希({}),绝对没有密钥,无论如何。

通过传递Hash作为参数,您可以向方法发送可变数量的参数。在方法定义中,您只需将其作为params['flow']进行访问即可,这将为上述调用提供值short

if 'short' == params['flow']是Ruby中的一个简单条件。您正在检查params['flow']short的值是否相等。如果params['flow']确实是short,则会调用底层块(short_flow_to_print_options(params)

答案 1 :(得分:2)

params是方法go_to_print_options的可选参数。如果在调用方法时未给出默认值(此处为{},则为空Hash)。

params['flow']获取哈希'flow'的{​​{1}}密钥的值(或params,如果nil没有此密钥。