問題タブ [scala-2.10]
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 - 型インスタンスから暗黙を見つける
Typeインスタンスを通常の Scala 型として使用することは可能ですか? たとえば、次のスニペットでは、tpeを使用してpiを見つけることができますか?
私の目標を達成するための簡単な解決策がないこと、およびtpeを暗黙的に [Double]に変換するための一種のファクトリが必要になることを恐れています。とにかく、リフレクション型を Scala コードに統合することは非常に強力であり、見た目ほどクレイジーではないと思います。
scala - Scala 2.10でリフレクションを介してタイプパラメーターを見つけますか?
タイプタグを使用して、いくつかのタイプのパラメータを確認できます。
しかし、一般的な方法で、プログラムでその「Int」をそこから取り出す方法を完全に理解することはできません。
(私はREPLを1時間歩き回って、Typeの順列を試し、そこから何が得られるかを確認しています...これが「リスト」であることを示す多くの情報を取得しますが、見つけて幸運を祈りますその"Int"!そして私はtoString()出力の解析に頼りたくありません...)
Daniel Sobralは、ここで優れた(いつものように)簡単な概要を示しています。ここでは、彼は私が探しているものに興味をそそるほど近づいていますが、(明らかに)その特定のクラスについて、そのタイプが尋問:
しかし、宣言されたメソッドのリストをルート化し、そのうちの1つがタグの現在のタイプ情報をどこかにキャプチャする(したがって公開する)ことを含まない、より一般的なものを望んでいます。
Scalaが「List[Int]」を簡単に印刷できるのなら、文字列パターンマッチングに頼らずに、なぜその「Int」の部分を見つけるのが難しいのでしょうか。それとも、本当に、本当に明白な何かが欠けているだけですか?
Grr..。
scala - Scala 2.10リフレクションを使用してメソッド引数(およびタイプ)を検索しますか?
私は(ここから)Scalaメタデータを取得するためにエクストラクターを使用することを学びました。私も気づきましたUniverse.MethodTypeExtractor
:
作成するエクストラクタクラスと構文とのパターンマッチング
MethodType(params, respte)
ここで、paramsはメソッドのパラメータシンボルの空の可能性のあるリストであり、restpeはメソッドの結果タイプです。
素晴らしい!私が欲しいもののように聞こえます!(?)
しかし、どのように取得するのMethodType
ですか?(そして、なぜこれは、メソッド「Def」または「Ref」とは対照的に、メソッド「type」(メソッド「types」ですか?)のエクストラクタですか?)
それとも、いわば完全に「間違った木を吠えている」のでしょうか。
scala - Scala(2.10)タイプのタグまたはシンボルからJavaクラスを取得する方法はありますか?
これは私を近づけるように見えますが、(a)完全ではありません(以下を参照)、および(b)名前の文字列表現を使用することはハックのように感じます...
この情報にアクセスするためのより直接的な方法がありませんか?それとも、Javaクラス情報の並列セットを保持するためだけに、ある時点でクラス情報も必要な場合は、それが最善でしょうか?(うーん!)
scala - 2.10 の Scala REPL breakIf の代替
インタラクティブなデバッグのために REPL コードでメソッドを使用することについてここで読んでいましたが、Scala 2.10 で削除されたと言っているこの投稿を見つけました。残念ながら、その投稿にはコードが削除された理由が説明されていません。breakIf
break
breakIf
ILoop
これを行うためのより良い方法があるため、これらの機能は削除されたと思います。もしそうなら、誰かが私を啓発してもらえますか?
scala - Scala の「後置操作」
30分探しましたが、まだわかりません。
SIP: Modularizing Language Featuresには、Scala 2.10 で明示的に「有効化」する必要がある多くの機能があります ( import language.feature
)。その中には がありpostfixOps
、どこにも参照が見つかりません。この機能は正確に何を可能にしますか?
scala - Scala 2.10 RC1 に対してプロジェクトをビルドするときの scala.reflect.internal.MissingRequirementError
Scala 2.10.0 RC1 に対して古いプロジェクトをビルドしようとしています。これを行うと、次のエラーが表示されます。
完全なスタック トレースはこちら: https://www.refheap.com/paste/6228。
このエラー メッセージは何を意味しますか? クラスパスにいくつかのライブラリがありませんか?
scala - TypeTagを保存し、後でそれを使用してタイプをAnyに再アタッチする方法(Scala 2.10)
カスタムの異種リストとマップを作成しようとしています。マニフェストの使用に関する例はありますが、Scala 2.10では非推奨であり、TypeTags(またはClasstags)を使用する必要があります。マップの場合、(たとえば)タプルString->(TypeTag [_ <:Any]、Any)を使用して、AnyのTypeへのバインドを保持できるようです。
私の問題は、回復されたTypeTagと未定義のTから取得して、TypeTag.tpeのインスタンスを返すことができるようにする方法です-コード内のある時点で
//** How do I use saved typeTag to define T here?**
記述されているように、メソッドgetにはコンパイラエラーはありませんが、TはNothingに設定され、Some(Nothing)を返します。コメントアウトされた行を機能させたいと思い
case Some( x ) => // println( "Get 2*'pi'=" + x*2 )
ます。「値*はNothingのメンバーではありません」というメッセージが表示されます。もっとコンパクトに書くことができると思いますが、そうすることで、IDEにマウスオーバーして、ステップバイステップで進むことができます。関連する質問があります-Scala:TypeTagとは何ですか?どのように使用しますか? しかし、それは「ラストマイル」にはならないようです-Anyのタグを付け直します。
これを行う方法?
これが私がこれまでに持っているコードです:
scala - Scala: ボイラープレートのない pimping
Pimp my Libraryパターンを多用しており、ボイラープレートを削除したいと考えています。たとえば、PrettyPrint というトレイトがあるとします。
Int と Double をポン引きしたい場合は、次のようなコードを書く必要があります。
上記では、ボイラープレートとして分類します: 1) 暗黙的な変換の名前、2) "new" キーワード、3) おそらく引数名 "self"、4) おそらく "implicit" キーワード。私はむしろこのようなものを書きたい:
上記のコードの右側では、「self」という名前が変換引数であると想定されています。
これを行う方法についてのアイデアはありますか?
いくつかのメモ:
1) 必要に応じて Scala 2.10 を使用します。
2)私の知る限り、Scala 2.10 の新しい暗黙のクラスは十分ではありません。これは、暗黙的なクラスごとに暗黙的な変換が 1 つしかないためです。つまり、PrettyPrint が 2 回宣言されているため、次のようなコードはコンパイルされません。
scala - Scala2.10TypeTagの使用法
私は新しいscalaリフレクションAPIを掘り下げていますが、次のスニペットが期待どおりに機能しない理由を理解できません。与えられた階層(私ができる限り単純化しようとしました):
f
与えられたタイプのオブジェクトをフィルタリングするメソッドを期待しています。したがって、次のスニペットはSeq[Foo]
そして、実際には返されますSeq[Foo]
が、他のメッセージはフィルタリングされていないため、バグのように聞こえます。
質問。私はTypeTag
間違って使用していますか、それとも新しいリフレクションAPIの欠陥ですか?
PS0。で試してみましScala 2.10.0-RC1
た2.10.0-RC2
PS1。回避策はに置き換えることTypeTag
です。Manifest
そのため、次のコードcollect
をシーケンスに使用するとList(Foo(1))
、期待どおりに返されます。
更新Scala 2.10.0-RC2
:新しいリリースと同じです。