首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建一个接受参数散列的ruby方法

创建一个接受参数散列的ruby方法
EN

Stack Overflow用户
提问于 2009-02-24 20:23:23
回答 4查看 48.3K关注 0票数 61

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

代码语言:javascript
复制
login_success :msg => "Success!", :gotourl => user_url

接受这种参数的方法的原型是什么?我该如何阅读它们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-24 20:25:10

如果你用散列语法将参数传递给Ruby函数,Ruby会认为这就是你的目标。因此:

代码语言:javascript
复制
def login_success(hsh = {})
  puts hsh[:msg]
end
票数 65
EN

Stack Overflow用户

发布于 2009-02-24 20:54:12

要记住的关键一点是,如果散列参数是函数的最后一个参数,则只能使用省略散列字符{}的语法。所以你可以做Allyn做过的事情,这会起作用的。也是

代码语言:javascript
复制
def login_success(name, hsh)
  puts "User #{name} logged in with #{hsh[:some_hash_key]}"
end

你可以用下面的命令调用它

代码语言:javascript
复制
login_success "username", :time => Time.now, :some_hash_key => "some text"

但是,如果散列不是最后一个参数,则必须用{}将散列元素括起来。

票数 32
EN

Stack Overflow用户

发布于 2015-04-30 21:36:18

随着Ruby 2.0中关键字参数的出现,您现在可以这样做

代码语言:javascript
复制
def login_success(msg:"Default", gotourl:"http://example.com")
  puts msg
  redirect_to gotourl
end

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

代码语言:javascript
复制
def login_success(msg:, gotourl:)
  puts msg
  redirect_to gotourl
end

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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/583423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档