Điều gì làm ~ trong đoạn Scala này?Người điều hành dấu ngã ở Scala
Ví dụ:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
đã sâu mà làm gì để táo của tôi?
Điều gì làm ~ trong đoạn Scala này?Người điều hành dấu ngã ở Scala
Ví dụ:
scala> val apple = 1
apple: Int = 1
scala> ~apple
res0: Int = -2
đã sâu mà làm gì để táo của tôi?
Đầu tiên, một số lời khuyên meta. Bất cứ lúc nào bạn tự hỏi làm thế nào trình biên dịch mở rộng một số cú pháp đường, infers một loại, hoặc áp dụng một chuyển đổi tiềm ẩn, sử dụng scala -Xprint:typer -e <expr>
để cho bạn thấy những gì đã xảy ra.
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_~
Được rồi, một tiền tố ~
được mở rộng đến một phương pháp gọi thường xuyên của unary_~
.
6.12.1 Pre fi x Operations
Một pre fi x hoạt động op e bao gồm một pre fi x hành op, mà phải là một trong những ers fi identi
+
,-
,!
hoặc~
. Biểu thứcop e
tương đương với ứng dụng phương pháp sau 01 xe.unary_op
.Toán tử trước x khác với ứng dụng chức năng bình thường trong biểu thức toán hạng của chúng không cần phải là nguyên tử. Ví dụ, chuỗi đầu vào
-sin(x)
được đọc là-(sin(x))
, trong khi chức năng ứng dụng phủ nhậnsin(x)
sẽ được phân tích cú pháp khi ứng dụng của toán tử lỗi đối với toán hạng phủ nhận và (x).
Điều đó có nghĩa rằng các nhà khai thác tiền tố không bị giới hạn để xây dựng trong các loại, họ có thể được sử dụng trên các loại của riêng bạn (mặc dù nó không phải là một ý tưởng tốt để đi điên với sức mạnh này!)
scala> object foo { def unary_~ = "!!!" }
defined module foo
scala> ~foo
res0: java.lang.String = !!!
Vì vậy, câu hỏi của bạn là gì? Bạn có thể kiểm tra chỉ mục của ScalaDoc cho thư viện chuẩn cho methods starting with u
. nightly ScalaDoc có một số tài liệu được thêm gần đây cho phương pháp này.
the bitwise negation of this value
Example:
~5 == -6
// in binary: ~00000101 ==
// 11111010
Cảm ơn lời giải thích và tham khảo. – Jack
~
là toán tử bitwise không được áp dụng cho số nguyên. Cách dễ dàng nhất để xem trong hex:
scala> "%x".format(~0x7F)
res0: String = ffffff80
1 để khẳng định đó là Bitwise không điều hành. Tôi đã không quan tâm đến việc in chuỗi nhị phân khi bạn trả lời. Xin lỗi tôi chỉ có thể chấp nhận một câu trả lời. – Jack
"dễ nhất" có thể là chủ quan ... – FracturedRetina
scaleX, như hoogle cho scala: http://scalex.org/?q=~ –
@GeneT liên kết bị phá vỡ – sjking