你可以在ruby的同一行中附加两个字符串吗?

时间:2014-04-22 20:40:43

标签: ruby string

我希望能够做到:

1.9.3-p448 :018 > string1 = string2 = "substring1"
 => "substring1" 
1.9.3-p448 :019 > string1
 => "substring1" 
1.9.3-p448 :020 > string2
 => "substring1" 
1.9.3-p448 :021 > string1 += string2 += " substring2"    # HERE
 => "substring1substring1 substring2" 
1.9.3-p448 :022 > string1
 => "substring1substring1 substring2" 
1.9.3-p448 :023 > string2
 => "substring1 substring2" 

# HERE行后,我希望两个字符串都包含"substring1 substring2"。是否有简洁的方法来实现这一目标?

编辑:这样做的动机是构建一个包含明文密码的字符串。我想同时构建一个不包含密码的可记录字符串。

EDIT2:在下面使用@ Ajedi32的建议,我现在有了这个。哪个好,但肯定不那么漂亮。

command = ""
public = ""

[command, public].each {|str| str << "command_name"}
[command, public].each {|str| str << " -a a"}
[command, public].each {|str| str << " -b b"}
[command, public].each {|str| str << " -c c"}
command << " -d d"
command << " -e e"
[command, public].each {|str| str << " -f f"}
command << " -g g"
[command, public].each {|str| str << " -h h"}
[command, public].each {|str| str << " -i i"}

puts command
=> command_name -a a -b b -c c -d d -e e -f f -g g -h h -i i
puts public
=> command_name -a a -b b -c c -f f -h h -i i

有没有更好的方法来实现这一目标?

3 个答案:

答案 0 :(得分:3)

嗯,在您的示例中,以下任何一项都可以使用:

作业(类似于你的第一行):

string1 = string2 += " substring2"

连接一个字符串,两者都会更新,因为它们是同一个对象:

string1 << " substring2"

OR

string2 << " substring2"

所有这些解决方案都依赖于string1和string2在您的示例中完全相同的事实。如果string1string2实际上是不同的字符串,并且您想要附加到这两个字符串,则可以尝试这样做:

[string1, string2].each{|str| str << " substring2"}

答案 1 :(得分:0)

您可以执行以下操作:

string1, string2=[string1, string2].map{|s| s+"substring2"}

答案 2 :(得分:0)

这个怎么样:

string1 = string2 += " substring2"

或者你需要做到这一点?我不知道你是否试图制作这么复杂的东西!