如何在rails控制台中编写一个包含字符数组的函数?

时间:2017-09-18 03:01:51

标签: ruby-on-rails rails-console

我知道在编写一个带字符串的函数时,它看起来像:

def function("string")

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

4 个答案:

答案 0 :(得分:1)

请试一试。

#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 :(得分:1)

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

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的方法+。这叫做鸭子打字。这里重要的不是对象是哪个类,而是它可以响应的消息。

答案 2 :(得分:0)

你可以通过

来做到这一点
def my_function(arr=[], s)
  puts arr.inspect
  puts s.inspect
end

你可以用

调用方法
my_function([1,3,4], "string")

答案 3 :(得分:0)

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

def doSomething(value)
  if (value.is_a?(Array))
    value.any_array_method # For eg: value.include?('a')
  else
    raise "Expected array value"
  end
end

你可以这样称呼:

doSomething(['a', 'b', 'c'])

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

RuntimeError: Expected array value

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

希望这有帮助。