当前位置:  开发笔记 > 编程语言 > 正文

创建一个接受参数哈希的ruby方法

如何解决《创建一个接受参数哈希的ruby方法》经验,为你挑选了4个好方法。

我知道这可能是一个愚蠢的问题,但我不知道如何创建一个接受参数哈希的ruby方法.我的意思是,在Rails中我想使用这样的方法:

login_success :msg => "Success!", :gotourl => user_url

接受这种参数的方法的原型是什么?我怎么读它们?



1> Allyn..:

如果你用散列语法将参数传递给Ruby函数,Ruby会认为这是你的目标.从而:

def login_success(hsh = {})
  puts hsh[:msg]
end


那说你期待任何数量的论点.就像`foo(1,:b,'3')`.此外,您不需要"= {}"部分.这样可以正常工作:def login_success(hash).上面的代码只是将默认值设置为空哈希.
a*(又名splat运算符)表示该方法接受任意数量的args并将它们放在一个名为params的数组中.决定是否使用它取决于你所追求的.在您提供的示例中,哈希是有意义的.

2> scottd..:

要记住的一个关键事项是,如果hash参数是函数的最后一个参数,那么只能省略散列字符{}.所以你可以做Allyn做的事情,那样就可以了.也

def login_success(name, hsh)
  puts "User #{name} logged in with #{hsh[:some_hash_key]}"
end

你可以用它来调用它

login_success "username", :time => Time.now, :some_hash_key => "some text"

但是如果哈希不是最后一个参数,则必须用{}包围哈希元素.



3> Intentss..:

随着Ruby 2.0中Keyword Arguments的出现,您现在可以做到

def login_success(msg:"Default", gotourl:"http://example.com")
  puts msg
  redirect_to gotourl
end

在Ruby 2.1中,您可以省略默认值,

def login_success(msg:, gotourl:)
  puts msg
  redirect_to gotourl
end

调用时,省略一个没有默认值的参数会引发一个 ArgumentError


您可能还想提一下,您可以省略Ruby 2.1中的默认值来生成所需的参数,例如`def login_success(msg:,gotourl:)`如果您尝试调用`login_success`将导致错误被引发没有指定`msg`和`gotourl`参数.

4> 小智..:

使用一个参数.Ruby会将命名值转换为哈希值:

def login_success arg
 # Your code here
end

login_success :msg => 'Success!', :gotourl => user_url
# => login_success({:msg => 'Success!', :gotourl => user_url})

如果你真的想确保你得到一个哈希,而不是默认的红宝石鸭子打字,那么你需要控制它.比如,例如:

def login_success arg
  raise Exception.new('Argument not a Hash...') unless arg.is_a? Hash
  # Your code here
end

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有