問題タブ [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.

0 投票する
2 に答える
2070 参照

scala - 文字列へのリフレクションによって spark udf を定義する

scala 関数定義を含む文字列から spark(2.0) で udf を定義しようとしています。スニペットは次のとおりです。

これは私にエラーを与えます:

ただし、udf を次のように定義すると:

それはうまく動作します。ここでの問題は何ですか?最終的な目的は、scala 関数の定義を持つ文字列を取得し、それを udf として使用することです。

0 投票する
1 に答える
102 参照

android - Android での Scala のテスト:「scala.reflect.ScalaSignature.bytes が見つかりませんでした」

Scala でインストルメンテーション テストを作成しようとしています(完全なコードはこちら)。

java.lang.IncompatibleClassChangeError: Couldn't find scala.reflect.ScalaSignature.bytes実行時エラーの原因は何ですか?

私は維持しようとしてscala.reflect.ScalaSignature.bytesbuild.sbtます:

しかし、それは役に立たないようです。

完全なスタック トレース:

0 投票する
1 に答える
1580 参照

scala - Scala リフレクションを使用してメソッドの戻り値の型文字列を取得するには?

次のコードを検討してください。

オブジェクトまたはクラスのいずれかが与えられた場合、まずメソッド名を見つける必要があります (それほど難しくないようです)。

その後、各メソッドについて、Scalaの戻り値の型 (Java のものではない) の文字列の説明を見つけたいと思います。たとえば、 forFoo.fooには String が必要で、List[(String, Int)]forBar.barには String が必要Option[(String, Long)]です。

これこのチュートリアルを見ましたが、理解できませんでした。

編集:コメントに基づいて試したのは次のとおりです。

私が得るエラーは次のとおりです。

ただし、これは機能します(REPLで試しました):

どのオブジェクト/クラスが渡されるかが事前にわからない最初の方法で使用する必要があります。どんな助けでも大歓迎です。

0 投票する
1 に答える
166 参照

scala - scala-reflect と TypeTag を介してジェネリック クラス フィールドにアクセスする方法 (Scala 2.10)

フィールドがジェネリック クラスに存在するかどうかを確認しようとしています。

どうすればこれを実装できますか??

0 投票する
0 に答える
343 参照

scala - すべての実装クラスがプライベートであるインターフェースに KryoSerializer を実装する方法は?

KryoSerializerSpark で使用するオブジェクトをシリアル化できるように、実装するクラスを作成しようとしています。私が抱えている問題は、すべてのクラスがパブリック インターフェイスを実装しているのに対し、実装しているクラスはすべてプライベートであることです。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 つの可能性は、プライベート クラスを拡張する新しいクラスを定義し、それらの間で変換する暗黙のセットを定義することです。ただし、いくつかの理由でかなり醜いものであり、かなりの数のプライベートクラスが問題になっています。

誰でもアプローチを提案できますか? 避けるべき落とし穴についてアドバイスをお願いします。

0 投票する
1 に答える
667 参照

scala - ClassTag.runtimeClass.isInstance が AnyVal に対して機能しない

scala ClassTags での作業 classTag.runtimeClass.isInstance を AnyVal オブジェクトで使用すると、正しく動作しないことがわかりました。これをテストできるスニペットを次に示します。これを AnyVal オブジェクトで機能させるためのアイデアはありますか?

ところで、私はScala 2.10で作業しています

0 投票する
1 に答える
55 参照

scala - Class インスタンスに基づく明示的なキャストの実行

class があるとしXます。コードのある時点でoof 型を取得し、Object明示的に にキャストしたいと考えていXます。通常、私はそうしますval x: X = o.asInstanceOf[X]。ただし、Xスコープ内にはありません。私が持っているのは、XのインスタンスだけですClass

  1. classOf[X]という引数として関数に渡しますclassOfX
  2. 私の機能内で、私はしたいと思いますval x: X = o.asInstanceOf[classOfX]

Scalaでこれを行う方法はありますか?