Co robi ~ w tym kawałku Scali?Operator tyldy w Scali
Na przykład:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
że robak Co zrobić, aby moje jabłka?
Co robi ~ w tym kawałku Scali?Operator tyldy w Scali
Na przykład:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
że robak Co zrobić, aby moje jabłka?
Po pierwsze, kilka meta-porad. Za każdym razem, gdy zastanawiasz się, w jaki sposób kompilator rozwija jakiś cukier syntaktyczny, podaje typ lub stosuje niejawną konwersję, użyj scala -Xprint:typer -e <expr>
, aby pokazać, co się stało.
scala -Xprint:typer -e "val a = 2; ~a"
...
private[this] val a: Int = 2;
private <stable> <accessor> def a: Int = $anon.this.a;
$anon.this.a.unary_~
Dobra, prefiks ~
rozpręża się do zwykłego sposobu pw unary_~
.
6.12.1 Wstępnie fi x Operacje
wstępnym fi x działanie op zawiera wstępnie fi x operatora OP, która musi być jedną z stwierdziliśmy ers fi
+
,-
,!
lub~
. Wyrażenieop e
jest równoważne z aplikacją metody post-xxxe.unary_op
.Operatory predfx różnią się od zwykłych aplikacji funkcji w , że ich wyrażenie operandowe nie musi być atomowe. Na przykład, sekwencja wejściowa wejściowa
-sin(x)
jest odczytywana jako-(sin(x))
, podczas gdy funkcja neguje, że zostanie zinterpretowana jako zastosowanie operatora operatora do zanegowania i (x).
Oznacza to, że operatorzy prefiks nie są ograniczone do zbudowany w typów, mogą one być stosowane na własnych typów (choć nie jest to dobry pomysł, aby oszaleć z tej mocy!)
scala> object foo { def unary_~ = "!!!" }
defined module foo
scala> ~foo
res0: java.lang.String = !!!
A co z twoim pytaniem? Możesz sprawdzić indeks ScalaDoc dla biblioteki standardowej dla methods starting with u
. W dokumencie nightly ScalaDoc jest ostatnio dodana dokumentacja dla tej metody.
the bitwise negation of this value
Example:
~5 == -6
// in binary: ~00000101 ==
// 11111010
Dzięki za wyjaśnienia i referencje. – Jack
~
jest operatorem bitowym, nie stosuje się do liczb całkowitych. Najłatwiej zobaczyć na hex:
scala> "%x".format(~0x7F)
res0: String = ffffff80
+1 dla potwierdzenia, że to nie bitowe operatora. Bawiłem się przy drukowaniu binarnego ciągu, kiedy odpowiadałeś. Przepraszam, że mogę przyjąć tylko jedną odpowiedź. – Jack
"najprostszy" może być subiektywny ... – FracturedRetina
scaleX, jak hoogle do Scala: http://scalex.org/?q=~ –
@GeneT link jest uszkodzony – sjking