Size: a a a

2020 July 27

АГ

Алексей Гевондян... in PHP
почему T и R не могут быть просто интерфейсами? зачем шаблонизация то?
источник

SP

Sergey Protko in PHP
потому что интерфейс не твой, в вендорах лежит
источник

АГ

Алексей Гевондян... in PHP
никак не пойму... тупой видимо)
источник

SP

Sergey Protko in PHP
или ты без фреймворков пишешь?
источник

АГ

Алексей Гевондян... in PHP
на симфони напрямую не писал еще. ларавел / yii2
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
у тебя есть функция которая принимает на вход T и возвращает R. что не так?
В первом случае у тебя тип T будет зафиксирован для инстанса класса в момент создания инстанса. И дальше функция будет принимать только этот тип.
Во втором функция будет принимать абсолютно любой тип.
источник

SP

Sergey Protko in PHP
грубо говоря ты как автор фреймворка предлагаешь точку расширения - возможность зарегистрировать свой нормалайзер. У него 2 метода - один должен сказать супортишь ты такое или нет и другой должен уже сделать дела.
источник

АГ

Алексей Гевондян... in PHP
ок, интерфейсы принадлежат фреймворку... и в чем проблема то с ними? их нельзя имплементить?
источник

SP

Sergey Protko in PHP
их нельзя менять
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
у тебя есть функция которая принимает на вход T и возвращает R. что не так?
Блин, вся моя претензия была в том, что у тебя генерик параметры были объявлены на уровне функции. Т.е. function<T,R>(data: T): R, а не на уровне класса.
источник

АГ

Алексей Гевондян... in PHP
а зачем их менять то
источник

АГ

Алексей Гевондян... in PHP
если надо менять - наследуешь еще свои интерфейсы, свой нормалайзер расширенный делаешь
источник

SP

Sergey Protko in PHP
Aleksandr Khristenko
Блин, вся моя претензия была в том, что у тебя генерик параметры были объявлены на уровне функции. Т.е. function<T,R>(data: T): R, а не на уровне класса.
религия не позволяет дженерики юзать без классов?)
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
религия не позволяет дженерики юзать без классов?)
=\
источник

A

Aleksandr Khristenko in PHP
Мне кажется это ты не понимашь, как работают дженерики.
источник

A

Aleksandr Khristenko in PHP
Твоя сигнатура выше это просто any => any
источник

SP

Sergey Protko in PHP
function map<T, R>(list: T[], fn: Closure(T) => R): R[]
источник

SP

Sergey Protko in PHP
вот тебе any any
источник

A

Aleksandr Khristenko in PHP
Sergey Protko
function map<T, R>(list: T[], fn: Closure(T) => R): R[]
Именно. В этом примере у тебя есть зависимость между типами аргументов и типом ресалта. Поэтому тут все нормально.
источник

SP

Sergey Protko in PHP
Алексей Гевондян
если надо менять - наследуешь еще свои интерфейсы, свой нормалайзер расширенный делаешь
гугли про ковариантность/контрвариантность типов
источник