Size: a a a

2021 March 14

МП

Мимо Проходящий... in rust_offtopic
(
ну дык чекай-не-чекай, ошибка даункаста, потому что тип внезапно перестал имплементировать интерфейс это не желаемое поведение

Ну вот вы написали библиотеку, где
type Heh interface {
 Mda()
}

type MyLibraryType struct {
 ...
}

func (t MyLibraryType) Mda() {
 ...
}
А потом бац, и у Heh.Mda меняется сигнатура, а у MyLibraryType.Mda нет. А вы об этом не узнаете
Обкакулька
> Ну вот вы написали библиотеку, где

тогда у меня будет func foo(p Heh), и ничего даункастить мне даром не надо.

А если я это юзаю в питонизме, мне вообще ни разу не в падлу тесты написать на даункаст. Мне бы даже в голову не пришло питонизм без тестов отдавать в прод. Но опять таки - питонизмы я не пишу практически никогда ибо нефиг
источник

МП

Мимо Проходящий... in rust_offtopic
Αλεχ Zhukovsky
какие типы имплементят интерфейс это хорошо. А все интерфйсы которые тип имплементит он напишет? Ну как тут вот например
нажимаешь зелёненькую кнопочку слева, он тебе в стандартном джетбейнсовском гуе выводит попап с перечислением всех интерфейсов, что имплементятся данным типом
источник

(

( in rust_offtopic
Мимо Проходящий
> Ну вот вы написали библиотеку, где

тогда у меня будет func foo(p Heh), и ничего даункастить мне даром не надо.

А если я это юзаю в питонизме, мне вообще ни разу не в падлу тесты написать на даункаст. Мне бы даже в голову не пришло питонизм без тестов отдавать в прод. Но опять таки - питонизмы я не пишу практически никогда ибо нефиг
как вы связали два тезиса про библиотеку и даункасты в один?
источник

МП

Мимо Проходящий... in rust_offtopic
(
как вы связали два тезиса про библиотеку и даункасты в один?
для использования интерфейса в го два кейса. 1 - стандартный типизированный, 2 - маргинальный-питонический (для программсита, не для стд либы) через interface{} и даункаст. Вы сделали консёерн про второй, я вам ответил. А уж где интерфейс задекларирован, в библотеке или локально под шконкой - вообще фиолетово
источник

(

( in rust_offtopic
Мимо Проходящий
для использования интерфейса в го два кейса. 1 - стандартный типизированный, 2 - маргинальный-питонический (для программсита, не для стд либы) через interface{} и даункаст. Вы сделали консёерн про второй, я вам ответил. А уж где интерфейс задекларирован, в библотеке или локально под шконкой - вообще фиолетово
так ладно, начнем сначала. Если у меня есть интерфейс с методом и тип, который его имплементит, а потом интерфейс меняется, как компилятор узнает, что тип его больше не имплементит?
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Мимо Проходящий
нажимаешь зелёненькую кнопочку слева, он тебе в стандартном джетбейнсовском гуе выводит попап с перечислением всех интерфейсов, что имплементятся данным типом
ну ок, тогда этим пользоваться можно
источник

МП

Мимо Проходящий... in rust_offtopic
(
так ладно, начнем сначала. Если у меня есть интерфейс с методом и тип, который его имплементит, а потом интерфейс меняется, как компилятор узнает, что тип его больше не имплементит?
источник

(

( in rust_offtopic
Мимо Проходящий
да
источник

МП

Мимо Проходящий... in rust_offtopic
"как компилятор узнает, что тип его больше не имплементит?"  скажем так - оно так задумано и устроено
источник

(

( in rust_offtopic
Мимо Проходящий
"как компилятор узнает, что тип его больше не имплементит?"  скажем так - оно так задумано и устроено
что значит задумано и устроено? Я же сказал - проблема переносится в место использования. Если у вас мест использования нет, то компилятор и не ругнется
источник

МП

Мимо Проходящий... in rust_offtopic
Вопрос знатокам - если нет мест использования интерфейса,  то на кой хер его объявлять? для красоты что-ли? или опять какое-то недопонимание?
источник

(

( in rust_offtopic
Мимо Проходящий
Вопрос знатокам - если нет мест использования интерфейса,  то на кой хер его объявлять? для красоты что-ли? или опять какое-то недопонимание?
чтобы вашей библиотекой могли пользоваться не только вашими типами. Сами же Writer приводили в пример
источник

МП

Мимо Проходящий... in rust_offtopic
(
чтобы вашей библиотекой могли пользоваться не только вашими типами. Сами же Writer приводили в пример
io.Writer используется - в стандартной библиотеке.
если я объявляю интерфейс в библиотеке, так только для того, чтобы функции из апи библиотеки содержали его в сигнатурах
объявлять интерфейс и ни где его не использовать - это какая-то наркомания. Поэтому вопрос тот же - зачем мне это делать если я не наркоман ?
источник

(

( in rust_offtopic
Мимо Проходящий
io.Writer используется - в стандартной библиотеке.
если я объявляю интерфейс в библиотеке, так только для того, чтобы функции из апи библиотеки содержали его в сигнатурах
объявлять интерфейс и ни где его не использовать - это какая-то наркомания. Поэтому вопрос тот же - зачем мне это делать если я не наркоман ?
Ну вот вам синтетический пример библиотечного кода
type BinaryOperation interface {
 func WithOther(other int) int
}

func doBinaryOperationTwice(b BinaryOperation, target int) int {
 return b.WithOther(b.WithOther(target))
}

Я надеюсь я с синтаксисом не накосячил
источник

МП

Мимо Проходящий... in rust_offtopic
b.withOther(b.withOther(target))
источник

(

( in rust_offtopic
target, да
источник

МП

Мимо Проходящий... in rust_offtopic
Ну и всё таки WithOther
источник

МП

Мимо Проходящий... in rust_offtopic
А как интерфейс попадёт в закрытую функцию? Только через открытую же. Значит он таки используется?
источник

C

Crush_my_love in rust_offtopic
Мимо Проходящий
ну ок, посмотрю в GoLand. Он покажет в т.ч. и какие типы данный интерфейс имплементят
Если для удобного использования языка нужно привязываться к какой-то одной ide,  то это уже не оч хороший язык
источник

(

( in rust_offtopic
Мимо Проходящий
А как интерфейс попадёт в закрытую функцию? Только через открытую же. Значит он таки используется?
Ну, интерфейс используется, в смысле, что встречается в объявлениях. Просто функции сами не вызываются с объектами конкретных типов, потому что это библиотека
источник