我试图将函数返回的两个字符串concat化为一行中的两个现有字符串.

这是我的代码和额外的步骤

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

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

我正在try 以下方法,但不起作用

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

应要求提供更多信息:

我基本上是在写一个配置转换器.配置文件必须是纯文本文件.为了使代码更加 struct 化,我创建了以下模块,然后在需要生成配置的特定部分时调用模块函数.之后,我将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))

Ruby相关问答推荐

如何将包含换行符(和可能其他特殊字符)的Ruby字符串转义为有效的shell变量值?

如何在将拆分元素保留为空字符串的同时拆分字符串?

用函数组合枚举器的Ruby方法

为什么数组中的 splat 如此昂贵?

仅在模块中列出方法?

如何过滤散列数组以仅获取另一个数组中的键?

C# 中的 typeof 保留字是否有 Ruby 类似功能?

在 rake 任务中提问

在 gem 中放置/访问配置文件的位置?

为什么 Matz Select 在 Ruby 中默认使字符串可变?

Python 是否在 Ruby 中进行类似于字符串 #{var}的变量插值?

ruby 是否支持 case 语句中的范围?

确定字符串数组是否包含ruby中的某个子字符串

如何强制 Ruby 显示完整的堆栈跟踪?

Ruby 中的 $1 和 \1

如何获取当前 rake 任务的 PID?

如何理解 strptime 与 strftime

使用哈希值呈现 ERB 模板

如何在 Capistrano v3 的服务器上运行 shell 命令?

如何在遍历数组时使用 Array#delete?