Full explanation here:
https://blog.merovius.de/posts/2018-06-03-why-doesnt-go-have-variance-in/

On Saturday 6 January 2024 at 11:55:27 UTC John Pritchard wrote:

> Hi,
>
> Thinking about types and their conception, I could avoid the type 
> assertion boilerplate and rationalize the type membership relationship if 
> this code compiled.
>
> Best,
>
> John
>  
>
> On Sat, Jan 6, 2024 at 3:21 AM Tamás Gulácsi <tgula...@gmail.com> wrote:
>
>> Where does TestObject implement the Comparable interface, esp. the 
>> Compare method?
>> I don't see such in that rep.
>> The implemented TestObject.Compare method has different signature: it 
>> requests a TestObject, not a Comparable interface, as your spec!
>> This is only the first error.
>>
>> The second is that a slice of objects cannot be converted to a slice of 
>> interface - only by manually copying:
>>
>> ```
>> diff --git a/sort_test.go b/sort_test.go
>> index 0874721..c89b3b3 100644
>> --- a/sort_test.go
>> +++ b/sort_test.go
>> @@ -13,10 +13,10 @@ type TestObject string
>>  
>>  type TestList []TestObject
>>  
>> -func (this TestObject) Compare(that TestObject) int {
>> +func (this TestObject) Compare(that Comparable) int {
>>  
>>   var bi, bj byte
>> - var x, y, z int = 0, len(this), len(that)
>> + var x, y, z int = 0, len(this), len(that.(TestObject))
>>   var d, c int = 0, 0
>>  
>>   if y == z {
>> @@ -34,7 +34,7 @@ func (this TestObject) Compare(that TestObject) int {
>>  
>>   for ; x < c; x++ {
>>   bi = this[x]
>> - bj = that[x]
>> + bj = (that.(TestObject))[x]
>>   if bi != bj {
>>  
>>   if bi < bj {
>> @@ -58,7 +58,11 @@ func (this TestList) Print() {
>>  func TestSort(t *testing.T) {
>>   var vector TestList = TestList{TestObject("20231219192613"), 
>> TestObject("20231221074246"), TestObject("20240102214104"), 
>> TestObject("20231222063428"), TestObject("20240104112200"), 
>> TestObject("20231217190339"), TestObject("20231213155157"), 
>> TestObject("20231219065525"), TestObject("20231231120412"), 
>> TestObject("20231221152849"), TestObject("20240102073948"), 
>> TestObject("20240101083455")}
>>  
>> - Sort(vector)
>> + objs := make([]Comparable, len(vector))
>> + for i := range vector {
>> + objs[i] = vector[i]
>> + }
>> + Sort(objs)
>>  
>>   vector.Print()
>>  }
>> ```
>> John Pritchard a következőt írta (2024. január 6., szombat, 8:53:01 
>> UTC+1):
>>
>>> Hi,
>>>
>>> Here's a case of "type dissonance" I don't understand.  Why should it be?
>>>
>>> https://github.com/syntelos/go-sort
>>>
>>>
>>> An interface type not passing through a static public package function 
>>> that employs the interface.
>>>
>>> type Comparable interface {
>>>
>>>
>>> Compare(Comparable) int
>>>
>>> }
>>>
>>> func Sort(array []Comparable) ([]Comparable)
>>>
>>>
>>> With go-1.20.12:
>>>
>>> $ go test
>>> # github.com/syntelos/go-sort [github.com/syntelos/go-sort.test]
>>> ./sort_test.go:61:7: cannot use vector (variable of type TestList) as 
>>> []Comparable value in argument to Sort
>>> FAIL    github.com/syntelos/go-sort [build failed]
>>>
>>>
>>> Any comments?
>>>
>>> Best,
>>>
>>> John
>>>
>>>
>>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/ba7239c1-cb52-4f86-9e56-da6ffa721fa5n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/golang-nuts/ba7239c1-cb52-4f86-9e56-da6ffa721fa5n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/a44e7a3b-9390-460e-9b80-e9f5ffe5a18bn%40googlegroups.com.

Reply via email to