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))
我正在尝试 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))