Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将Ruby数组元素传递给方法_Arrays_Ruby_Chef Infra - Fatal编程技术网

Arrays 将Ruby数组元素传递给方法

Arrays 将Ruby数组元素传递给方法,arrays,ruby,chef-infra,Arrays,Ruby,Chef Infra,我不是程序员,但我发现自己在写一些简单的ruby,对一些事情不太确定 我有以下功能 def resolve_name(ns_name) ip = Resolv.getaddress(ns_name) return ip end 阵列呢 array = ['ns-1.me.com', 'ns-2.me.com'] 我要做的是将数组中的每个元素传递给要求值的函数,并将其输出给。。。某物可能是个变量。一旦我有了解析的IP,我将把它们传递给erb模板。还不太确定当可能有1到4个结果时如何处理

我不是程序员,但我发现自己在写一些简单的ruby,对一些事情不太确定

我有以下功能

def resolve_name(ns_name)
  ip = Resolv.getaddress(ns_name)
  return ip
end
阵列呢

array = ['ns-1.me.com', 'ns-2.me.com']
我要做的是将数组中的每个元素传递给要求值的函数,并将其输出给。。。某物可能是个变量。一旦我有了解析的IP,我将把它们传递给erb模板。还不太确定当可能有1到4个结果时如何处理

我想我需要做的是做一个each.do和typecast,将字符串输入到我的函数中,但我还没有弄清楚如何真正做到这一点,或者正确地表达我的问题,让谷歌告诉我

没有我想要的

irb(main):010:0> resolved = resolve_name(array)
TypeError: no implicit conversion of Array into String

有什么建议吗?

看看ruby的文档,它是数组实现的。您要寻找的是map方法,它获取可枚举元素(即数组)的每个元素,并将其传递给块,然后返回一个新数组和块的结果。像这样:

array.map{|element| resolve_name(element) }
另一方面,在方法中,如果只返回局部变量的值,则不需要使用它;return语句是可选的——ruby方法总是返回最后执行的语句的结果。因此,您的方法可以缩短为:

def resolve_name(ns_name)
  Resolv.getaddress(ns_name)
end
然后,实际上它所做的就是将一个方法调用包装到另一个方法调用中。因此,最终,您只需将数组重命名为ns_名称即可做到这一点,以使其不言自明:

ns_names = ['ns-1.me.com', 'ns-2.me.com']
ip_addresses = ns_names.map{|name| Resolv.getaddress(name) }

现在ip_addresses是一个可以在模板中使用的ip地址数组。

看看ruby的文档,它是数组实现的。您要寻找的是map方法,它获取可枚举元素(即数组)的每个元素,并将其传递给块,然后返回一个新数组和块的结果。像这样:

array.map{|element| resolve_name(element) }
另一方面,在方法中,如果只返回局部变量的值,则不需要使用它;return语句是可选的——ruby方法总是返回最后执行的语句的结果。因此,您的方法可以缩短为:

def resolve_name(ns_name)
  Resolv.getaddress(ns_name)
end
然后,实际上它所做的就是将一个方法调用包装到另一个方法调用中。因此,最终,您只需将数组重命名为ns_名称即可做到这一点,以使其不言自明:

ns_names = ['ns-1.me.com', 'ns-2.me.com']
ip_addresses = ns_names.map{|name| Resolv.getaddress(name) }

现在ip_addresses是一个ip地址数组,您可以在模板中使用。

如果您传递一个数组,您可以执行以下操作:

def resolve_name(ns_name)
  res = []
  ns_name.each do |n|
    res << {name: n, ip:  Resolv.getaddress(name) } 
  end   
  res
end

并获取一个哈希数组,这样您就可以知道哪个地址有哪个ip,如果您传递一个数组,您可以执行以下操作:

def resolve_name(ns_name)
  res = []
  ns_name.each do |n|
    res << {name: n, ip:  Resolv.getaddress(name) } 
  end   
  res
end
并获取一个哈希数组,以便知道哪个地址具有哪个ip