問題タブ [value-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - オーバーヘッドなしで値クラスを強化するにはどうすればよいですか?
Scala 2.10 では値クラスが導入されており、これはクラスを extends にすることで指定できますAnyVal
。値クラスには多くの制限がありますが、それらの大きな利点の 1 つは、新しいクラスを作成するペナルティなしで拡張メソッドを使用できることです。値クラスを配列に入れるなどのボックス化が必要でない限り、それは単純に古いクラスに加えたものです。クラスを最初のパラメーターとして受け取る一連のメソッド。したがって、
i + j*j
(JVM がメソッド呼び出しをインライン化すると) 自分で作成するよりもコストがかからないものにアンラップします。
残念ながら、値クラスを記述するSIP-15の制限の 1 つは、
- C の基になる型は、値クラスではない場合があります。
たとえば、ボクシングのオーバーヘッドなしでタイプセーフなユニットを提供する方法として、手に入れることができる値クラスがある場合 (本当に必要な場合を除く):
それでは、Meter
オブジェクト作成のオーバーヘッドなしでエンリッチする方法はありますか? SIP-15 の制限により、明らかな
アプローチ。
performance - 暗黙の値クラスの継承はオーバーヘッドを導入しますか?
scala の値クラスを自分のプロジェクトの 1 つに適用したいと考えています。これにより、特定のプリミティブ型を大きなオーバーヘッドなしで強化し (願っています)、型安全性を維持できるからです。
私の質問: forceの継承は、オブジェクトを使用するたびにオブジェクトOrdered
の割り当てをPos
行う (それによって大きなオーバーヘッドが発生する) かどうか。もしそうなら:これを回避する方法はありますか?
arrays - 値クラスでの CLI 配列の初期化
コンパイラはこのクラスのすべての要素をゼロで初期化するため、値クラスにはデフォルトのコンストラクターがないことを知っています。しかし、配列は値クラスにあり、初期化されていません:
私はチートして使用することができました:
しかし、別の解決策があるはずです。
誰かがこれを解決する方法を教えてもらえますか?
scala - 値クラスが不要なパブリック メソッドを導入する
私のライブラリのいくつかの scala-doc を見ると、値クラスからの不要なノイズがあるように見えました。例えば:
これにより、不要なシンボルが導入されますi
。
そのようなものは、scala docs と IDE オートコンプリートの両方に表示されますが、これは本当に良くありません。
それで...この問題を軽減する方法のアイデアはありますか? 私はあなたが使用できることを意味しますがRichInt(val self: Int)
、それはそれをより良くしません(4.self
、wth?)
編集:
次の例では、コンパイラは中間オブジェクトを消去しますか?
scala - マクロを使用して要素の型クラス操作を拡張する
次の設定を想定しています。
に直接展開する方法はm op n
ありますa.op(m,n)
か?a
A
java - コレクション内の Scala.Long と Java.lang.Long の間の暗黙的な変換
JavaConverters を使用して、Java SortedSet から Vector に変換しています。
私の getInstructions 関数は java.lang.Long の ArrayList を返しますが、消費するコードには Scala.Long が必要です。Java.lang.Long を使用するようにすべての消費コードを変更せずにこれを行う方法はありますか?
さらに、上記のように追加のオブジェクトを割り当てずに、ArrayList へのランダム アクセスを許可する値クラスへの暗黙的な変換を行う方法はありますか? あなたが提供するかもしれない洞察に感謝します。
scala - Scala で値クラスをパラメーターとして受け取るメソッドをオーバーライドできないのはなぜですか?
Scala 2.10.3 で値クラス (AnyVal を拡張するクラス) をいじっていますが、それらを抽象メソッドのパラメーターとして使用すると、奇妙なコンパイラ エラーが発生します。次の例が示すように:
コンパイラは次のエラーを吐き出します。
なぜこれが機能しないのですか?値クラスを抽象メソッドに渡す方法はありますか?