Thông báo lỗi mô tả các vấn đề - trong F #, list<list<'a>>
không tương thích với seq<seq<'a>>
.
Chức năng upcast
giúp làm được việc này, bằng cách làm cho a
thành một list<seq<float>>
, mà sau đó sẽ tương thích với seq<seq<float>>
:
let a = [upcast [4.]]
Test.func(a)
Edit: Bạn có thể làm func
linh hoạt hơn trong các loại nó chấp nhận. Bản gốc chỉ chấp nhận các chuỗi seq<'a>
. Mặc dù list<'a>
thực hiện seq<'a>
, các loại không giống nhau và trình biên dịch cung cấp cho bạn một lỗi.
Tuy nhiên, bạn có thể sửa đổi func
chấp nhận chuỗi của bất kỳ loại, miễn là loại mà thực hiện seq<'a>
, bằng cách viết các loại bên trong như #seq
:
type Test() =
static member func (a: seq<#seq<'a>>) = 5.
let a = [[4.]]
Test.func(a) // works
Nguồn
2010-07-29 10:29:12
Và tại sao lại như vậy? Nếu bạn viết "let func (a: seq <'a seq>) = 5." sau đó nó hoạt động mà không có bất kỳ upcasting. –
Tôi gặp lỗi tương tự - http://gist.github.com/497844 –
Lỗi của tôi. Bạn đúng rồi. Bạn có bất cứ lời giải thích tại sao cho 'func (a: float seq) = 5.' chúng ta không phải làm upcasting và cho seq seq chúng ta phải làm điều đó? –