Size: a a a

2021 March 17

Е

Евгений in dlang.ru
e
Я не использую ди.
А зачем тебе тогда в чат о D?
источник

DH

Dark Hole in dlang.ru
Dmitry Popov
Тип же часто не известен ещё при написании:
auto f(T)(T x) { return x.

Что тут можно показать после точки?
Общие штуки типа stringof или принимающих любой тип.
источник

DH

Dark Hole in dlang.ru
Ну а вообще писать такой код — мне кажется bad practice
источник

DH

Dark Hole in dlang.ru
Не в смысле "шаблоны это плохо", а в смысле "мы не знаем, что есть у типа"
источник

Е

Евгений in dlang.ru
Dark Hole
Не в смысле "шаблоны это плохо", а в смысле "мы не знаем, что есть у типа"
А зачем нам знать, что у него есть? Главное знать, что у него должно быть.
источник

DH

Dark Hole in dlang.ru
Евгений
А зачем нам знать, что у него есть? Главное знать, что у него должно быть.
Одно и то же
источник

Е

Евгений in dlang.ru
Dark Hole
Одно и то же
Не совсем. Компилятор знает, и нам этого достаточно. Не понимаю почему это bad practice?
источник

DH

Dark Hole in dlang.ru
Евгений
Не совсем. Компилятор знает, и нам этого достаточно. Не понимаю почему это bad practice?
Потому что мы получаем доступ к чему-то, чего нет в сингатуре. А следственно метод становится непрозрачным, и кидает довольно странные ошибки. Кроме того, его становится невозможным "дополнить" для других случаев.
источник

Е

Евгений in dlang.ru
Dark Hole
Потому что мы получаем доступ к чему-то, чего нет в сингатуре. А следственно метод становится непрозрачным, и кидает довольно странные ошибки. Кроме того, его становится невозможным "дополнить" для других случаев.
Можно дописать условия
f(T)(T x) if(isNumber!T)
источник

Е

Евгений in dlang.ru
Но если название функции вменяемое, то можно обойтись и без этого. Функция std.stdio.write совершенно понятна несмотря на всеядность.
источник

Е

Евгений in dlang.ru
Что значит "кидает странные ошибки" и "невозможно дополнить" так и не понял.
источник

Е

Евгений in dlang.ru
"Невозможно дополнить", это в смысле нельзя перегрузить? Ну тот же write отлично дополняется другим способом, без перегрузки.
источник

DH

Dark Hole in dlang.ru
Евгений
Что значит "кидает странные ошибки" и "невозможно дополнить" так и не понял.
1. Мы где-то в коде пишем x.foo, но не пишем в сингатуре что-то вроде hasFoo!T. Когда мы пытаемся скормить функции тип без foo у нас получится на выходе куча ошибок из кода функции (которую не факт что лично мы писали).
2. Мы можем писать шаблоны с одинаковым именем, если они инстанциируются в разных условиях. Если у нас один шаблон инстанциируются во всех случаях без ограничений и кидает ошибку компиляции в "неправильных", мы не сможем дописать его на другие типы. Ну точнее сможем, но до будут костыли и вероятно довольно неудобные.
источник

DH

Dark Hole in dlang.ru
Евгений
Можно дописать условия
f(T)(T x) if(isNumber!T)
Я об ситуации, когда такого условия нет
источник

0

000Sanya in dlang.ru
Dark Hole
Я об ситуации, когда такого условия нет
а условия можно сделать зависящими от фазы луны)
источник

DH

Dark Hole in dlang.ru
000Sanya
а условия можно сделать зависящими от фазы луны)
Не особо
источник

0

000Sanya in dlang.ru
ну тип там может быть вполне обычный код, и кто то точно навернет такие  условия, которые фиг поймешь
источник

DH

Dark Hole in dlang.ru
И?
источник

DH

Dark Hole in dlang.ru
Это тоже bad practice)0)
источник

0

000Sanya in dlang.ru
Ага да
источник