对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']
答案 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
没有此密钥。