2014-05-07 18 views
6

Scala phiên bản 2.10.3 chạy trên java 7xáo trộn ngẫu nhiên không làm việc cho Phạm vi

import scala.util.Random 
Random.shuffle(0 to 4) // works 
Random.shuffle(0 until 4) // doesn't work 

: 9: Lỗi: Không thể xây dựng một bộ sưu tập các loại scala.collection.AbstractSeq [Int] với phần tử kiểu Int Dựa trên một bộ sưu tập kiểu scala.collection.AbstractSeq [Int].

Thông báo lỗi dường như thực sự chỉ cho tôi biết "Bạn không thể làm điều đó". Bất cứ ai có bất kỳ cái nhìn sâu sắc là tại sao?

+0

công việc hiện tại của tôi xung quanh: Random.shuffle ((0 đến 4) .toIndexedSeq) –

+0

Tôi đoán là nó có thể liên quan đến '0 đến 4' và' 0 cho đến 4' là các lớp khác nhau '0 đến 4 res0: scala.collection.immutable.Range.Inclusive với scala.collection.immutable.Range.ByOne = Phạm vi (0, 1, 2, 3, 4) 0 cho đến 4 res1: scala.collection.immutable. Phạm vi với scala.collection.immutable.Range.ByOne = Phạm vi (0, 1, 2, 3) ' – Andrey

+0

@Andrey yeah Tôi nhận thấy rằng ... Tôi đã xem chữ ký kiểu để trộn: def shuffle [T, CC [ X] <: scala.TraversableOnce [X]] (xs: CC [T]) (ẩn bf: scala.collection.generic.CanBuildFrom [CC [T], T, CC [T]]): CC [T] = {/ * mã được biên dịch * /}. Tôi thấy rằng lỗi đến từ lớp CanBuildFrom.class và nó không thể tìm thấy một ẩn cho lớp .Range.ByOne –

Trả lời

6

Scala đang suy ra các thông số loại sai đến shuffle. Bạn có thể buộc những người làm việc với:

Random.shuffle[Int, IndexedSeq](0 until 4) 

hoặc bị hỏng cái với:

Random.shuffle[Int, AbstractSeq](0 to 4) 

Tôi không biết tại sao nó đi kèm với các thông số sai cho Range, như được trả về bởi until, nhưng đúng những cái cho Range.Inclusive, như được trả lại bởi to. Range.Inclusive trực tiếp các lớp con Range mà không trộn lẫn trong bất kỳ đặc điểm nào, vì vậy nó không nên được xử lý theo cách khác. Điều này trông giống như một lỗi Scala với tôi.

+1

Đây là lỗi: https://issues.scala-lang.org/browse/SI-6948 –

Các vấn đề liên quan