gpt4 book ai didi

Ruby 自定义字符串方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:28 25 4
gpt4 key购买 nike

如何使这段代码更优雅?我有:

alpha = "lorem ipsum"
alpha = alpha + "\n" + "more text"
alpha = alpha + "\n" + "look I'm woody, howdy howdy howdy"
#etc

我愿意:

alpha.puts "lorem ipsum"
alpha.puts "more text"
alpha.puts "look I'm woody, howdy howdy howdy"
# etc

或者,也许 alpha.append 因为它没有被采用。我尝试过:

class String
def append(apnd)
self.to_s + "\n" + apnd
end
end

但这不会修改它,只会返回它。我从搜索中了解到你不能修改 self 。我遇到了同样的问题:

def apnd(a,b)
a = a + "\n" + b
end

这让我感到非常困惑,因为我认为 Ruby 通过引用而不是通过值来传递对象。

我看到了“Custom + Method in Ruby String”和其他几个 Stack Overflow 帖子。


更新:

啊哈,对于 apnd 方法,我可以遵循“'pass parameter by reference' in Ruby?”,但这意味着我不能使用 apnd(alpha, "stuff"),它会必须是 apnd(:alpha, "stuff", binding) 这不会减少重复,因为我必须将绑定(bind)传递给每个方法。

最佳答案

您可以使用 StringIO 接近您所描述的内容:

require 'stringio'
alpha_io = StringIO.new

alpha_io.puts "lorem ipsum"
alpha_io.puts "more text"
alpha_io.puts "look I'm woody, howdy howdy howdy"

alpha_io.string
# => "lorem ipsum\nmore text\nlook I'm woody, howdy howdy howdy\n"

但是,如果您的字符串大部分是文字,您可以使用 heredoc 轻松逃脱:

alpha = <<-STRING
lorem ipsum
more text
look I'm woody, howdy howdy howdy
Some interpolation #{"here".upcase}
STRING

puts alpha
# lorem ipsum
# more text
# look I'm woody, howdy howdy howdy
# Some interpolation HERE

(尽管 SO 对语法感到困惑,但我向您保证它是有效的 ruby​​ ;))

关于Ruby 自定义字符串方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22427379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com