我正在浏览Ruby源代码,似乎无法找到我的问题的答案:
如果我在字符串(str.upcase.reverse
)上调用多个方法,Ruby会优化此查询吗? upcase
的代码基本上循环遍历字符串并将每个字母转换为其大写值,reverse
反转字符串。 Ruby是否将这些(或任何其他可组合的组合)组合在一起,以便它同时反转和大写O(n)
而不是在字符串中循环每个字符两次?
答案 0 :(得分:2)
您希望的优化不会发生。正在对字符串调用reverse
方法(str.upcase
的结果)。请注意,结果行为仍为O(n)
但是O(2n)
为O(n)
)
答案 1 :(得分:1)
不,没有像你描述的那样进行优化,但可以随意编写一个在一个循环中执行反向+大写的方法。
绝对查看Benchmark标准库。在编写优化时,始终使用基准测试,永远不要假设:)
PS:reverse.upcase
仍为O(n)。 Big O表示法忽略常数。