Tôi mới sử dụng scala và tôi thấy cần phải chuyển đổi giá trị boolean thành số nguyên. Tôi biết tôi có thể sử dụng giống như if (x) 1 else 0
nhưng tôi muốn biết nếu có một phương pháp ưa thích, hoặc một cái gì đó được xây dựng vào khuôn khổ (tức toInt()
)Có cách nào dễ dàng để chuyển đổi một Boolean thành một số nguyên không?
Trả lời
Nếu bạn muốn kết hợp Boolean
và Int
hoạt động sử dụng một implicit
như trên nhưng mà không cần tạo một lớp:
implicit def bool2int(b:Boolean) = if (b) 1 else 0
scala> false:Int
res4: Int = 0
scala> true:Int
res5: Int = 1
scala> val b=true
b: Boolean = true
scala> 2*b+1
res2: Int = 3
lợi thế của việc sử dụng ngầm định không có lớp học là gì? –
@Russ Bradberry, Nếu bạn thử câu trả lời từ @Jackson Davis, bạn phải gọi một cách rõ ràng hàm asInt để thực hiện chuyển đổi để làm ==> val a: Int = true là không thể, và do đó làm ==> (1- thật). Chuyển đổi không minh bạch. – Patrick
do đó, điều này làm cho nó toàn cầu? hay tôi cần phải làm một cái gì đó đặc biệt để làm cho toàn cầu này? cũng, điều này sẽ làm việc như một cái gì đó như nếu tôi chèn vào mysql '" chèn vào blah (boolVal) giá trị ("+ b +") "', nó sẽ tự động giả định phiên bản int của nó và không phải là phiên bản bool? –
Bạn có thể làm điều này một cách dễ dàng với các chuyển đổi ngầm:
class asInt(b: Boolean) {
def toInt = if(b) 1 else 0
}
implicit def convertBooleanToInt(b: Boolean) = new asInt(b)
Sau đó, bạn sẽ nhận được một cái gì đó giống như
scala> false toInt
res1: Int = 0
Quy ước thư viện là sử dụng 'toInt' - điều tương tự sẽ là một ý tưởng hay ở đây. –
đủ công bằng, được chỉnh sửa để phản ánh điều đó. –
Kỹ thuật tuyệt vời này được gọi là "pimp my library". –
Thực ra, tôi mong đợi nó là if (x) 1 else 0
, không phải if (x) 0 else 1
.
Đó là lý do tại sao bạn nên viết chuyển đổi của riêng mình. Integer không phải là một boolean, và nếu bạn muốn vì lý do nào đó để lưu trữ các boolean như các số nguyên, thì bạn nên trau dồi các tiêu chuẩn của riêng mình về sự thật và sự thật không được biểu diễn như thế nào.
Boolean "true" không phải là số, nó là một thể hiện của kiểu Boolean. Giống như java.lang.Boolean.TRUE
. Nó có thể được lưu trữ bên trong như một số nguyên, nhưng đó là một chi tiết thực hiện không nên bị rò rỉ vào ngôn ngữ.
Tôi muốn nói rằng if (x) 0 else 1
là phương pháp chuyển đổi ưu tiên. Nó rất đơn giản và nhanh chóng.
Bạn cũng có thể viết x match {case true => 0; case false => 1}
nếu bạn muốn sử dụng phương pháp so khớp mẫu chung hơn.
cũng ý tưởng là chuyển đổi nó thành c chuẩn 0 = false, 1 = true. Nhưng tại sao tôi sẽ sử dụng trận đấu thay vì ternary nếu khác? –
Trong khi sử dụng một implicit
có lẽ là cách tốt nhất để đi, nếu bạn muốn chuyển đổi nhanh chóng-và-bẩn từ boolean
để int
bạn có thể sử dụng boolean.compare(false)
Kể từ Scala 2.10 là giải pháp của Jackson Davis được thường xuyên hơn bằng văn bản sử dụng an implicitvalue lớp:
implicit class BoolToInt(val b:Boolean) extends AnyVal {
def toInt = if (b) 1 else 0
def * (x:Int) = if (b) x else 0
}
đối thoải mái thêm tôi cũng đã thêm một nhà điều hành nhân, vì đây là việc sử dụng phổ biến nhất của một Boolean để Int chuyển đổi cho tôi. Tôi thích điều này hơn làm cho việc chuyển đổi chính nó ngầm (giải pháp được cung cấp bởi Patrick), vì mất nhiều điều khiển kiểu hơn tôi muốn.
Nếu bạn không muốn đi theo con đường ngầm, điều này có thể hữu ích:
var myBool:Boolean = true
myBool: Boolean = true
myBool.compare(false)
res3: Int = 1
myBool = false
myBool: Boolean = false
myBool.compare(false)
res3: Int = 0
Tôi cũng nghĩ như vậy trước, nhưng hợp đồng so sánh chỉ hứa hẹn một số dương cho true.compare (false). Vì vậy, nó có thể là một JVM thực hiện trả về sth lớn hơn 1. –
- 1. Làm thế nào để chuyển đổi một số nguyên thành một chuỗi một cách dễ dàng?
- 2. Cách dễ dàng để chuyển đổi mã c thành x86?
- 3. Trong Scala, có cách nào dễ dàng để chuyển đổi một lớp chữ thường thành một tuple không?
- 4. Có cách nào dễ dàng để chuyển đổi văn bản thành HTML trong JavaScript không?
- 5. Cách dễ dàng để chuyển đổi exec sp_executesql thành một truy vấn bình thường?
- 6. Có cách nào dễ dàng để chuyển đổi tiêu chí thành HQL?
- 7. Chuyển đổi chuỗi có chứa một số thành số nguyên
- 8. Có cách nào dễ dàng để biến một bảng MySQL thành một Redis tương đương?
- 9. Có cách nào dễ dàng để hoàn nguyên toàn bộ danh sách thay đổi P4 không?
- 10. Cách dễ dàng để chuyển đổi bảng dữ liệu thành bảng băm hoặc sqldatareader thành hashtable
- 11. Làm cách nào để chuyển đổi bộ sưu tập Cookie thành danh sách chung? Dễ dàng
- 12. Làm thế nào để chuyển đổi một chuỗi (có số không đứng đầu hoặc không) thành một số nguyên?
- 13. là có một cách dễ dàng để tìm chỉ số mảng số không trong Fortran?
- 14. Có cách nào dễ dàng để biến một int thành một mảng ints của mỗi chữ số?
- 15. cách dễ dàng hơn để cư một danh sách với số nguyên trong .NET
- 16. số nguyên ruby thành boolean
- 17. chuyển đổi một số nguyên thành chuỗi as3
- 18. Có một mô-đun Python mà tôi có thể dễ dàng chuyển đổi các phân số hỗn hợp thành một phao không?
- 19. Tôi có thể sử dụng C-preprocssor để chuyển đổi một số nguyên thành chuỗi không?
- 20. Có cách nào dễ dàng để chuyển đổi Ứng dụng Android sang IPad, IPhone
- 21. Có cách nào dễ dàng để chuyển đổi các lớp C# sang PHP?
- 22. chuyển đổi một số nguyên thành chuỗi trong Erlang
- 23. Chuyển đổi số nguyên thành một bit đại diện
- 24. Làm thế nào để chuyển đổi một số nguyên ruby thành một biểu tượng
- 25. Cách dễ dàng để áp dụng hàm cho một mảng
- 26. Matlab, làm thế nào để chuyển đổi một chuỗi các số nguyên thành một vectơ?
- 27. Làm thế nào để chuyển đổi một số nguyên thành một mảng trong PHP?
- 28. Cách dễ dàng chuyển đổi từ WinForms sang WPF
- 29. Trong JavaScript/jQuery cách tốt nhất để chuyển đổi một số bằng dấu phẩy thành một số nguyên là gì?
- 30. Chuyển đổi thành một dòng số nguyên trong gấu trúc
Tôi nghĩ rằng nếu có một phương pháp trong khuôn khổ, nó sẽ làm điều gì đó giống như để 'nếu (x) 1 else 0', theo truyền thống C là 0 cho false và 1 cho true. –
tôi vừa nhận ra sai lầm của mình và chỉnh sửa bài đăng. –
Nếu không có nhiều bối cảnh, tôi sẽ nói rằng nó không thực sự là một thực hành tốt. Booleans không phải là số nguyên, tôi sẽ không chuyển đổi hoàn toàn từ cái này sang cái khác ... Tôi sẽ giữ cho sự chuyển đổi rõ ràng, nếu không nó có thể dễ dàng bị lẫn lộn. Phương châm cho các tính năng cao cấp của Scala là: "với sức mạnh to lớn có trách nhiệm lớn" :) – GClaramunt