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

标签 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']

最佳答案

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

因此,对于上述方法,您可以调用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,则底层 block 将被调用 (short_flow_to_print_options(params))

关于ruby-on-rails - 在 ruby​​ 代码中将参数作为 param={} 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23692545/

相关文章:

ruby-on-rails - minitest上的错误信息测试

ruby - 如何在 vim 中启用 ruby​​ 方法可视化

mysql - Rails 在 db 的所有列中搜索值而不显式命名它们

javascript - 如何将原型(prototype)类声明更改为 jquery?

ruby-on-rails - 如何在 capybara 和 poltergeist 中测试 CSV 下载?

ruby-on-rails - 在 Ruby 中重构

ruby-on-rails - AdServeModel < Couchbase::Model 的未定义方法 'validate'

ruby-on-rails - Ruby on Rails - 停留在 Hartl Book 的第 9.3.3 章,未定义的方法 sign_in

ruby - 从方法内部调用命令行参数?

ruby-on-rails - LiveReload on Rails 4.1.8 无法在 Chrome 或 Safari 中工作