Ruby字符串类多种方法和效率

Ruby字符串类多种方法和效率,ruby,performance,Ruby,Performance,我浏览了Ruby源代码,但似乎找不到问题的答案: 如果我对一个字符串调用多个方法(str.upcase.reverse),Ruby会优化这个查询吗?upcase的代码基本上在字符串上循环,并将每个字母转换为大写值,reverse反转字符串。Ruby是否将这些(或任何其他可组合的组合)组合在一起,以便同时反转并大写O(n),而不是在字符串中的每个字符上循环两次?您希望的优化不会发生。正在对字符串调用reverse方法(str.upcase的结果)。请注意,生成的行为仍然是O(n),但是(O(2n)

我浏览了Ruby源代码,但似乎找不到问题的答案:


如果我对一个字符串调用多个方法(
str.upcase.reverse
),Ruby会优化这个查询吗?
upcase
的代码基本上在字符串上循环,并将每个字母转换为大写值,
reverse
反转字符串。Ruby是否将这些(或任何其他可组合的组合)组合在一起,以便同时反转并大写
O(n)
,而不是在字符串中的每个字符上循环两次?

您希望的优化不会发生。正在对字符串调用
reverse
方法(str.upcase的结果)。请注意,生成的行为仍然是
O(n)
,但是(
O(2n)
O(n)

不,没有您描述的优化,但是可以编写一个在一个循环中执行反向+大写的方法

一定要查看标准库。编写优化时,始终进行基准测试,不要假设:)


PS:
相反。上例仍为O(n)。大O表示法忽略常数。

写,尽管我们“忽略”了常数,但它仍然有一个因子,特别是当它像5或10:)@seth时,我同意常数经常值得担心。只是有点迂腐:)是的,我知道它是如何被忽略的,但是如果lim常量=>n,那么它的实际O[(n-∆)n] =O(n^2):)写,尽管我们“忽略”了常数,但它仍然有一个因子,特别是当它像5或10:)这个问题的答案是特定于解释器/编译器的吗?它是关于ruby解释器的,是的