問題タブ [scala-reflect]
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 - 文字列へのリフレクションによって spark udf を定義する
scala 関数定義を含む文字列から spark(2.0) で udf を定義しようとしています。スニペットは次のとおりです。
これは私にエラーを与えます:
ただし、udf を次のように定義すると:
それはうまく動作します。ここでの問題は何ですか?最終的な目的は、scala 関数の定義を持つ文字列を取得し、それを udf として使用することです。
android - Android での Scala のテスト:「scala.reflect.ScalaSignature.bytes が見つかりませんでした」
Scala でインストルメンテーション テストを作成しようとしています(完全なコードはこちら)。
java.lang.IncompatibleClassChangeError: Couldn't find scala.reflect.ScalaSignature.bytes
実行時エラーの原因は何ですか?
私は維持しようとしてscala.reflect.ScalaSignature.bytes
いbuild.sbt
ます:
しかし、それは役に立たないようです。
完全なスタック トレース:
scala - Scala リフレクションを使用してメソッドの戻り値の型文字列を取得するには?
次のコードを検討してください。
オブジェクトまたはクラスのいずれかが与えられた場合、まずメソッド名を見つける必要があります (それほど難しくないようです)。
その後、各メソッドについて、Scalaの戻り値の型 (Java のものではない) の文字列の説明を見つけたいと思います。たとえば、 forFoo.foo
には String が必要で、List[(String, Int)]
forBar.bar
には String が必要Option[(String, Long)]
です。
これとこのチュートリアルを見ましたが、理解できませんでした。
編集:コメントに基づいて試したのは次のとおりです。
私が得るエラーは次のとおりです。
ただし、これは機能します(REPLで試しました):
どのオブジェクト/クラスが渡されるかが事前にわからない最初の方法で使用する必要があります。どんな助けでも大歓迎です。
scala - scala-reflect と TypeTag を介してジェネリック クラス フィールドにアクセスする方法 (Scala 2.10)
フィールドがジェネリック クラスに存在するかどうかを確認しようとしています。
どうすればこれを実装できますか??
scala - すべての実装クラスがプライベートであるインターフェースに KryoSerializer を実装する方法は?
KryoSerializer
Spark で使用するオブジェクトをシリアル化できるように、実装するクラスを作成しようとしています。私が抱えている問題は、すべてのクラスがパブリック インターフェイスを実装しているのに対し、実装しているクラスはすべてプライベートであることです。Kryo は、パッケージ外のプライベート クラスまたはインターフェイスのシリアライザーを定義することを許可したくないようです。
この問題が明らかになるのは、KryoSerializer
クラスを定義しようとすると、class [implementation] in package graph cannot be accessed in package [same package]
.
誰かが助けてくれることを望んでいるのは、この問題を解決するための戦略です。
Kryo が具体的なオブジェクトをシリアライズおよびデシリアライズしたい理由を理解しています。しかし、この場合、私はKryoSerializer
とにかく独自のものを定義しているので、実際にはインターフェイスのシリアライゼーションを定義する方が理にかなっています。Kryoをだまして正しいことをさせる方法はありますか?
(これが機能する理由は、インターフェイスでインスタンスを取得し、ストリームから書き込みまたは読み取りを行う関数を持つ関連があるObject
ためです。シリアライザーは、シリアル化形式のバージョン情報を追加しながら、本質的にこれらの関数をラップします。)
私が考えた 1 つの可能性は、リフレクション トリックです。private/final メンバーを含むクラスを逆シリアル化する場合、リフレクションを使用して private メンバーをアクセスおよび書き込み可能にし、値を設定してから、private/final に戻します。別のパッケージャーのプライベート クラスでそれが可能かどうかはわかりませんが、可能だとしてもかなり醜く非効率的です。
もう 1 つの可能性は、プライベート クラスを拡張する新しいクラスを定義し、それらの間で変換する暗黙のセットを定義することです。ただし、いくつかの理由でかなり醜いものであり、かなりの数のプライベートクラスが問題になっています。
誰でもアプローチを提案できますか? 避けるべき落とし穴についてアドバイスをお願いします。
scala - ClassTag.runtimeClass.isInstance が AnyVal に対して機能しない
scala ClassTags での作業 classTag.runtimeClass.isInstance を AnyVal オブジェクトで使用すると、正しく動作しないことがわかりました。これをテストできるスニペットを次に示します。これを AnyVal オブジェクトで機能させるためのアイデアはありますか?
ところで、私はScala 2.10で作業しています
scala - Class インスタンスに基づく明示的なキャストの実行
class があるとしX
ます。コードのある時点でo
of 型を取得し、Object
明示的に にキャストしたいと考えていX
ます。通常、私はそうしますval x: X = o.asInstanceOf[X]
。ただし、X
スコープ内にはありません。私が持っているのは、X
のインスタンスだけですClass
。
classOf[X]
という引数として関数に渡しますclassOfX
。- 私の機能内で、私はしたいと思います
val x: X = o.asInstanceOf[classOfX]
。
Scalaでこれを行う方法はありますか?