3

私は、ビューバウンドと同等のものは何であるかを自問しています

(implicit conv: String => A)

A私の最初の試みは、次のように型パラメーターを単純に宣言することでした。

[String <% A]

しかし、Scala コンパイラは"not found: type A"と文句を言います。

助言がありますか?

4

2 に答える 2

8

--修正後の投稿--

この構文[B <% A]は、実際には新しい型をバインドしますB。そう

class Foo[A, String <% A]

と同等です

class Foo[A, String](implicit $conv: String => A)

whereStringは、考えているクラスではなく、任意の型パラメーターです。

名前付きの暗黙的な変換がおそらく最良の選択肢だと思いますが、

class Foo[A](implicit conv: String => A)

の型はStringシャドウされていません。

概要: ビュー境界は、型パラメーターへの変換ではなく、導入された型パラメーターからの変換として役立ちます。

于 2011-08-23T21:27:44.523 に答える
2

それはビューバウンドではありません。バインドされたビューは、型パラメーターAが type として表示 (変換) できるという点でバインドされていることを示しますB。型と型パラメーターを逆にしたものは、修飾されません。

より明確にするために、境界は「自由な」型 (型パラメーター) に対する制限です。例えば:

type A <: String // A has an upper bound
type A >: String // A has a lower bound

したがって、ビューバウンドも制限であり、非常に異なるメカニズムによって課せられます。そのため、型ではなく、型パラメーターにのみ課すことができます。

確かに、String => A存在しなければならないということも一種の束縛ですが、名前や構文糖衣があるものではありません。

于 2011-08-24T15:12:21.820 に答える