Size: a a a

2020 June 06

SN

Shub Niggurath in F# Chat
отец Григорий
Погедь. У нас интерфейсы только эксплиситные. Как ты его методом класса перегрузишь?
Класс имплеметор может иметь и другие методы, так ведь? Вроде ничего не запрещает иметь метод интерфейса с другой сигнатурой, но на стороне класса. Другое дело, что при обьявлении типа экземпляра как интерфейса этот перегруженный метод не будет доступен. Вот тут должен помочь это #, но я с наскоку не смог заставить его работать
источник

SN

Shub Niggurath in F# Chat
А вообще я тут поразмыслил, и решил, что это не сильно хорошая идея, даже если заставить это работать
источник

IC

Ilya L Che in F# Chat
Отсутствующая документация -- это часть pit of success :D
источник

VS

Vladimir Shchur in F# Chat
Shub Niggurath
Класс имплеметор может иметь и другие методы, так ведь? Вроде ничего не запрещает иметь метод интерфейса с другой сигнатурой, но на стороне класса. Другое дело, что при обьявлении типа экземпляра как интерфейса этот перегруженный метод не будет доступен. Вот тут должен помочь это #, но я с наскоку не смог заставить его работать
верно, для такого нужно кастить то в интерфейс, то в класс
источник

SN

Shub Niggurath in F# Chat
В блогах пишут, что # работает как утиная типизация
источник

VS

Vladimir Shchur in F# Chat
это просто другая запись when T: ISomething
источник

AH

Ayrat Hudaygulov in F# Chat
Shub Niggurath
В блогах пишут, что # работает как утиная типизация
врутЪ
источник

AH

Ayrat Hudaygulov in F# Chat
Shub Niggurath
В блогах пишут, что # работает как утиная типизация
это для

https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AbEAzAzmgFxCgFcA7AHwIE8AHGAAgDEIIAKASgYF4GwMAhrlwMYZACYBYAFA16DAEIConHgwCWZABYwo6gs1acZcxkoBeAHgDkAgHyre/ISLFTpJuowDCjmQwCGXAIBAnUwBgBbGEjgXQYAWTZgAXMQRVTLFgg7Ll5jaUCgkLCI6Nj4gDlk1PSLSwBibNy1AqKZDBgDFKg1eqUoBw4ZbwA6SoYekdGEyeUZGSA

type Foo() = class end
type Bar() = inherit Foo()
type Baz<'a>() = class end

type C() =
   static member M(baz: Baz<Foo>) = ()
   static member N(baz: Baz<#Foo>) = ()
   
let bar = Baz<Bar>()
C.N bar // ok
C.M bar // error
источник

Н

Николай in F# Chat
Ayrat Hudaygulov
это для

https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AbEAzAzmgFxCgFcA7AHwIE8AHGAAgDEIIAKASgYF4GwMAhrlwMYZACYBYAFA16DAEIConHgwCWZABYwo6gs1acZcxkoBeAHgDkAgHyre/ISLFTpJuowDCjmQwCGXAIBAnUwBgBbGEjgXQYAWTZgAXMQRVTLFgg7Ll5jaUCgkLCI6Nj4gDlk1PSLSwBibNy1AqKZDBgDFKg1eqUoBw4ZbwA6SoYekdGEyeUZGSA

type Foo() = class end
type Bar() = inherit Foo()
type Baz<'a>() = class end

type C() =
   static member M(baz: Baz<Foo>) = ()
   static member N(baz: Baz<#Foo>) = ()
   
let bar = Baz<Bar>()
C.N bar // ok
C.M bar // error
То есть это для ковариантности?
источник

AH

Ayrat Hudaygulov in F# Chat
Николай
То есть это для ковариантности?
нет, это именно что where T: Something
присвоить Baz<Bar> в  Baz<Foo> нельзя
источник

AH

Ayrat Hudaygulov in F# Chat
а хотя лол. Оказывается можно!
let mutable bar: Baz<#Foo> = Baz<Bar>()
bar <- Baz<Bar>()
источник

AH

Ayrat Hudaygulov in F# Chat
не думал что так можно, но оказывается можно
источник

AH

Ayrat Hudaygulov in F# Chat
НИЧОСИ
источник

AH

Ayrat Hudaygulov in F# Chat
(хотя похер)
источник

AH

Ayrat Hudaygulov in F# Chat
хотя через жопку

let mutable bar: Baz<#Foo> = Baz<Bar>()
bar <- Baz<Bar>()
bar <- Baz<Foo>() :> Baz<#Foo>
источник

AH

Ayrat Hudaygulov in F# Chat
третья строчка только так работает...
источник

AH

Ayrat Hudaygulov in F# Chat
О. ещё и так можно

let mutable bar = Baz<#Foo>()
bar <- Baz<Bar>()
bar <- Baz<#Foo>()
источник

AH

Ayrat Hudaygulov in F# Chat
какой фшарп хитрый... Нихуя неясно
источник

AH

Ayrat Hudaygulov in F# Chat
А на самом деле ничего не делает
источник

AH

Ayrat Hudaygulov in F# Chat
Не, короче, забей. Тут ничего не работает
источник