[英]Enrich-My-Library optimization
免責聲明:我從C#來到Scala,在這里我非常感謝LINQ。 因此,我立即對迭代器和序列感到賓至如歸。 我錯過了收益率很高的“ C#風格”,但是我可以繼續做自己的事情……即使它付出了性能損失。
現在,當我錯過了一些C#中的集合方法時,我只是將其定義為擴展方法,並且編譯器在有效地處理代碼方面做得非常好。 在Scala中,我使用Pimp豐富我的圖書館方法,但是我有點擔心表演。
但是,與我的“ yield迭代器”相反,這是一種公認的常見模式。 Scala編譯器是否對其進行了優化,從而刪除了臨時對象的創建?
class RichFoo(f: Foo) {
def baz = f.bar()
def baz2 = f.bar() * 2
}
object RichFoo {
implicit def foo2Rich(f: Foo) = new RichFoo(f)
}
// on the caller side
val f : Foo = ....
f.baz
f.baz2
// this translates, literally, to new RichFoo(f).baz, new RichFoo(f).baz2
如果沒有,為什么? 在我看來,這是一個很好且安全的優化。 我可以向正確的方向“提示”或“強制”編譯器嗎? 有哪些更快的選擇?
我想在迭代器/可迭代的算法集合中使用該模式,因此我可以將其寫為filter / map / etc collection.baz(lambda).bar(lambda2)
但恐怕它會被證明過於“重”。 (與效率更高/直接但丑陋的bar(lambda2, baz(lambda, collection)
))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.