首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rails控制台中编写接受字符数组的函数?

如何在rails控制台中编写接受字符数组的函数?
EN

Stack Overflow用户
提问于 2017-09-18 03:01:51
回答 4查看 453关注 0票数 0

我知道在编写接受字符串的函数时,它看起来如下:

代码语言:javascript
复制
def function("string")

但是,如何编写一个需要数组的数组呢?我是否应该首先定义一个空数组,例如s=[],然后在编写函数时,只使用s作为输入?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-09-18 07:21:38

因为Ruby是动态语言,并且它支持Duck类型,所以我们从不声明方法的变量或参数的数据类型。因此,您可以在任何方法中传递数组,ruby只关心您可以在该参数上使用的方法,该参数是它的一个对象。因此,要确定您正在使用的数组方法将在数组上执行,只能这样做:

代码语言:javascript
复制
def doSomething(value)
  if (value.is_a?(Array))
    value.any_array_method # For eg: value.include?('a')
  else
    raise "Expected array value"
  end
end

你可以称之为:

代码语言:javascript
复制
doSomething(['a', 'b', 'c'])

如果您使用数组以外的任何其他参数调用它,那么它将给出:

代码语言:javascript
复制
RuntimeError: Expected array value

您也可以传递错误消息,而不是引发依赖于您的异常。

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2017-09-18 05:12:09

请尝尝这个。

代码语言:javascript
复制
#here argument name can be anything. It not compulsory to use array as argument name, it can be anything like `string`, `xyz` etc 

def function(array)
  p array
end

function([1,2,3,4,5])
票数 1
EN

Stack Overflow用户

发布于 2017-09-18 06:23:34

这是一个关于Ruby而不是Rails的问题。Ruby是一种动态类型语言,在方法定义中,它意味着不声明参数类型:

代码语言:javascript
复制
def add_three ( x, y , z)
  x + y + z
end

add_three(1, 2, 3)   # 6
add_three('a', 'b', 'c')   # 'abc'
add_three([2], [3], [4], # [2, 3, 4]
add_three(Date.new(2017,3,4), 1, 1), # new date 2017.3.6

重要的是x有一个接受y的方法+,而来自x + y的结果有一个接受z的方法+,这就是鸭子类型。这里重要的不是对象是哪个类,而是它能够响应什么消息。

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

https://stackoverflow.com/questions/46270992

复制
相关文章

相似问题

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