gpt4 book ai didi

ruby - 如何限制 block 被调用的次数?

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:33 24 4
gpt4 key购买 nike

How do I limit the number of replacements when using gsub? ,有人建议用下面的方法来做有限数量的替换:

str = 'aaaaaaaaaa'
count = 5
p str.gsub(/a/){if count.zero? then $& else count -= 1; 'x' end}
# => "xxxxxaaaaa"

它有效,但代码混淆了替换 (5) 的次数和应该替换的内容(如果应该替换,则为“x”,否则为 $&)。是否可以将两者分开?

(如果在这种情况下很难将这两件事分开,但在其他一些情况下可以做到,请将其作为答案发布)

最佳答案

将替换项提取为参数并通过在方法中关闭 block 来封装计数器怎么样?

str = "aaaaaaaaaaaaaaa"

def replacements(replacement, limit)
count = limit
lambda { |original| if count.zero? then original else count -= 1; replacement end }
end

p str.gsub(/a/, &replacements("x", 5))

您可以通过使用 block 进行替换来使其更加通用:

def limit(n, &block)
count = n
lambda do |original|
if count.zero? then original else count -= 1; block.call(original) end
end
end

现在你可以做类似的事情了

p str.gsub(/a/, &limit(5) { "x" })
p str.gsub(/a/, &limit(5, &:upcase))

关于ruby - 如何限制 block 被调用的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024525/

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