Arrays 将Ruby数组元素传递给方法
我不是程序员,但我发现自己在写一些简单的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个结果时如何处理
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