2012-06-20 27 views
23

thể trùng lặp:
What does :_* (colon underscore star) do in Scala?Điều gì: _ * làm khi gọi một phương pháp vararg Java từ Scala?

Tôi đang sử dụng REPL gọi một phương thức vararg Java với một Scala Array.

tôi nhận được một lỗi nếu tôi làm điều này:

case class Person(name: String, age: Int) 
val array = Array(classOf[String], classOf[Int]) 
Person.getClass.getMethod("apply", array) 

Nhưng nếu tôi làm điều này sau đó nó hoạt động:

Person.getClass.getMethod("apply", array:_*) 

Câu hỏi của tôi là gì :_* làm gì? Nó được định nghĩa ở đâu trong API Scala?

+0

Không chắc chắn nếu đó chính xác là trùng lặp. Lưu ý rằng anh ta gọi một phương thức Java với tham số lặp đi lặp lại, không phải là phương thức lặp lại-tham số Scala. – axel22

+2

Stack Overflow thực hiện một công việc tệ hại khi tìm kiếm các biểu tượng - trên thực tế, nó hoàn toàn bỏ qua chúng. Nếu bạn cần tìm kiếm các biểu tượng trong tương lai, hãy sử dụng [Symbol Hound] (http://symbolhound.com/). Nó sẽ tìm kiếm các câu hỏi trên Stack Overflow nhưng giữ các ký hiệu. –

Trả lời

28

thêm :_* yêu cầu trình biên dịch xử lý mảng dưới dạng varargs. Nó hoạt động giống với Scala như với Java. Nếu tôi có một phương pháp

def foo(args: Int*) = args.map{_ + 1} 

tôi có thể gọi nó như vậy:

foo(1, 2, 3, 4) //returns ArrayBuffer(2, 3, 4, 5) 

nhưng nếu tôi muốn vượt qua một chuỗi thực tế để nó (như bạn đang có với getMethod) tôi sẽ làm:

val mylist = List(1, 2, 3, 4) 
foo(mylist:_*) 
Các vấn đề liên quan