Ruby:如何在一行中将两个 return 值连接到两个字符串

Ruby: how to concat two return values to two strings in one line

我正在尝试 concat 由一个函数 return 编辑的两个字符串到一行中的两个现有字符串。

这是我的代码,带有额外的步骤

def my_function()
    return "foo", "bar"
end

foo = String.new
bar = String.new
ret1, ret2 = my_function()
foo.concat(ret1)
bar.concat(ret2)

我正在尝试类似下面的方法,但它不起作用

foo.concat(ret1), bar.concat(ret2) = my_function()

根据要求提供更多信息:

我基本上是在尝试编写一个配置转换器。配置文件需要是纯文本文件。为了使代码更加结构化,我创建了以下模块,然后在需要生成配置的特定部分时调用模块函数。之后,我将 return 写入一个字符串,然后在完成所有操作后将其写入文件:

module L4_LB
    extend self
    def build_ssl(some_vars)
        returns string_a, string_b
    end
    def build_vip(some_vars)
        returns string_a, string_b
    end
    def build_pool(some_vars)
        returns string_a, string_b
    end
end
    
config_file_a = String.new
config_file_b = String.new

ret_a, ret_b = L4_LB.build_ssl(some_vars)
config_file_a.concat(ret_a)
config_file_a.concat(ret_b)

ret_a, ret_b = L4_LB.build_vip(some_vars)
config_file_a.concat(ret_a)
config_file_a.concat(ret_b)

ret_a, ret_b = L4_LB.build_pool(some_vars)
config_file_a.concat(ret_a)
config_file_a.concat(ret_b)

这取决于concat是如何定义的。如果它接受多个参数,你应该可以这样做:

config_file_a.concat(*L4_LB.build_pool(some_vars))

请注意 *,它确保 build_pool 返回的数组中的每个元素都作为单独的参数传递给 concat。

另一方面,如果 concat 只接受一个参数,你可以定义一个辅助函数:

def my_concat(what, values)
  values.each do |element|
    what.concat(element)
  end
end

my_concat(config_file_a, L4_LB.build_pool(some_vars))

如果您希望将结果连接到两个不同的字符串,您可以使用:

def my_concat2(cs, vs)
  cs.each_with_index do |c, index|
    c.concat(vs[index])
  end
end

cs = [config_file_a, config_file_b]
my_concat2(cs, *L4_LB.build_ssl(some_vars))
my_concat2(cs, *L4_LB.build_vip(some_vars))
my_concat2(cs, *L4_LB.build_pool(some_vars))