169 похожих чатов

// @flow // SOLID // In focus L (Liskov principle) class User {} class

Owner extends User {}
class Admin extends Owner {}


class BaseProcessor {
getRelatedOwner(owner: Owner): Owner {
return owner
}
}

class ChildProcessor extends BaseProcessor {
// User <-- Owner --> Admin
// input --> output

// input: User <+-- Owner --!> Admin // covariance
// output: User <!-- Owner --+> Admin // contravariance
// User <!-- Owner --> Admin // invariance

// input
// User -> more general type (super type) -> ok
// Admin -> more concrete type -> error

// output completely the other way round
// User -> error
// Admin -> ok
getRelatedOwner(owner: User): Admin {
declare var o: Admin // return is not compatible with the result -> use hack !
return o
}
}

// ======================

function logger(entity: { +name: ?string }) { // name: ?string -> works the same // solving -> +name: ?string -> property name is covariant !
console.log(entity.name) // flow have no idea how you are using field name here !
//entity.name = '123'
}
/*
function logger(entity: { -name: ?string }) { // -name: string -> contravariance !
//console.log(entity.name)
entity.name = '123'
}
*/
type Entity = {
name: string // name: string
}

const foo: Entity = {
name: 'Vasya'
}

logger(foo)


// =======================

type Ent = {
process: (x: string) => number,
}

const r: Ent = {
process(x: mixed) { // all is ok because process takes more general type
return 5
}
}

1 ответов

22 просмотра

и что?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта