2017-11-30 2 views
0

"Int"型で暗黙的なインクリメントまたは "++"演算子を作成できるのだろうか 私のコードで任意のスコープから呼び出すことができます。 exampeのためのその(任意のパッケージからすなわち) scala - 任意のパッケージから呼び出すことができる "インクリメント拡張メソッド"を作成することは可能ですか?

var x = 4 
x++ 
println(x) // will print 5 

感謝。

+0

私は恐れることはできません。 'x + = 1'で本当に' ++ 'が必要なのはどういう意味ですか? – SergGr

答えて

0

高レベル(utilパッケージ)で暗黙のクラスを作成できます。なぜ暗黙のは(それなしxためprintln4を返された)それの世話をしていない

object RichPrimitive { 
    implicit class RichInt(var int: Int) { 
    def ++ = int = int + 1 
    } 
} 

import RichPrimitive.RichInt 

var x: RichInt = 4 // if you don't do : RichInt, this does not work 
x ++ 

println(x.int) // returns 5 

全くわからない:私はこの使用して明示的な型帰属を達成することができました。

+0

これはkevinjoeiyがすべての主要な側面(例えば、スコープ内の作品は 'Int'型で動作します)で要求されるものとはかなり違って見えます。 – SergGr

+0

暗黙のクラスをutilの場所に置くことで、指定されたパッケージ内の任意の場所にインポートすることができます。 それは 'Int'型でも動作します - 明示的な型表現を必要とします – Tanjin

+0

私は明らかに@kevinjoeiy要件をかなり違って理解していますので、彼を裁判官にしてください。 – SergGr

0

  1. 暗黙のクラスは、変数を変更することはできません。対照的に、collection.mutable.Mapに値を追加すると、マップを変更していて、その変数を保持している変数は変更されていません(つまり、1から2への変更は変数の変更であり、Intの変更ではありません)。マップ)
  2. 変数を変更できるようにしても、暗黙的なクラスを定義するスコープ外で使用する場合は、暗黙的なクラスを必ずインポートする必要があります。コード内のメインパッケージのパッケージオブジェクトにimplicit class RichIntを定義することもできますが、他のパッケージから使用する場合は、引き続きインポートする必要があります。

つまり、@ Tanjinの答えはあなたが望むものの公正な近似値です。

関連する問題