15

他の一般的な言語と同様に、「+」演算子が厳密に数値である DSL を作成しています。近いですが、文字列 "+" 演算子が暗黙の変換を台無しにしています。String クラスの演算子をアンインポートするための構文は何ですか?

より明確にするために、これの代わりに:

scala> var x = "2" + 3;
x: java.lang.String = 23

x を取得したい: Int = 5

それを実現するには、2つのことが必要だと思います。

  • 文字列から「+」の定義を削除(私のスコープ内でアンインポート)します
  • String から Int への暗黙的な変換を定義する

私は最初のステップで立ち往生しています。

ありがとう

4

3 に答える 3

9

Scala仕様のセクション12.3.1によると、の+メソッドStringはコンパイラーによって特別に扱われます。確かなことはわかりませんが、これは「インポート解除」できないことを意味していると思います。これは、型システムを実際に壊してしまうため(関連するtoStringメソッドと同じように)、残念です。

DSLのオペレーターに別の名前を使用できます++&

于 2010-04-18T23:26:46.393 に答える
4

文字列の+メソッドは、Stringクラス(したがって文字列オブジェクト)のメソッドであるため、インポートを解除することはできません。

于 2010-04-19T04:04:29.123 に答える
1

アンインポートすることはできませんが、 +: を使用して int クラスで定義できます。"2".toInt + 3 のように書くのが一番良いでしょう。

于 2011-03-10T20:28:05.177 に答える