我想知道是否有一个很好的模式或更好的特定函数,它应用一个函数直到它的结果不再发生变化。
url = "http://www.zzz.com/yyy/lt%255B1%255D.jpg"
unescaped = unescape(url)
while unescaped != url do
url = unescaped
unescaped = unescape(unescaped)
end
虽然上面的代码基本上是 ruby,但我认为它作为 psudocode 具有足够的可读性。 unescaped 的第一个设置是 http://www.zzz.com/yyy/lt%5B1%5D.jpg ,然后调用循环,因为发生了变化,因此 unescaped 变为 http://www.zzz.com/yyy/lt[1].jpg ,循环再次被调用,因为再次发生了变化,但这次我们没有什么可以逃脱的,所以 url 和 unescaped 变得相同,打破了 while 循环。
这段代码没有任何问题,我想知道是否有更可靠的方式来表示它,可以是伪代码形式,也可以是针对我的具体情况,用 ruby 表示。
非常感谢一如既往的帮助!
最佳答案
根据 macabail 对我原来问题的回答,这里是 ruby 的递归解决方案:
def rec_unescape(url)
url == (out = CGI::unescape(url)) ? out : rec_unescape(out)
end
关于ruby - 改变时重复...一旦改变不再发生即停止,即稳定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202403/