Dart

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Dart » Dart Basics » Возможно ли подобное реализовать?


Возможно ли подобное реализовать?

Сообщений 1 страница 6 из 6

1

https://forumupload.ru/uploads/001b/15/0c/16/211663.png

Таким образом компилятор не воспринимает, несмотря на то, что статический метод .tryParse определён в классе num, который является базовым и для int, и для double.
Если бы этот метод не был статическим, то проблем с подобной реализацией бы не было, но он всё же статический.

Возможно ли этот метод реализовать шаблонно подобным образом?

P.S.

Конечно же,
while(res == null);

Отредактировано Demusenko Mykyta (2021-03-15 22:32:17)

0

2

Не вставляйте скриншоты экрана. Копируйте в форум текст.
Можно все. Только в вопросе по-разному можно расставить запятые и получатся разные вопросы.

0

3

В коре прописана причина недовольства

/// It is a compile-time error for any type other than [int] or [double]
/// to attempt to extend or implement `num`.

По сути, у тебя проигнорирована ошибка с extend. С другой стороны, ничего не мешает тебе использовать здесь просто num, аки

num getNum() {
  num numer;
  do {
    numer = num.tryParse(stdin.readLineSync());
  } while (numer == null);
  return numer;
}

Ну а если критично возвращать int \ double вот так вот красиво одной функцией, то увы.

0

4

Bychkov написал(а):

Не вставляйте скриншоты экрана. Копируйте в форум текст.
Можно все. Только в вопросе по-разному можно расставить запятые и получатся разные вопросы.

Я не нашёл на форуме способ форматирования, подходящий для кода.

Вопрос сформулирован, на мой взгляд, достаточно однозначно.

Нужно реализовать функцию
T getNumberFromConsoleInput<T extends num>(String varname)
{...}

Суть функции в том, чтобы она ожидала от пользователя ввод, который можно спарсить в тип T, указанный при вызове функции.
T ограничен до типа num, то есть у нас есть два варианта вызова функции

Первый:

double res =  getNumberFromConsoleInput<double>("res");
//функция будет ждать ввода с консоли строки до тех пор, пока не сможет спарсить её с помощью double.parse.

Второй:

int res =  getNumberFromConsoleInput<int>("res");
//функция будет ждать ввода с консоли строки до тех пор, пока не сможет спарсить её с помощью int.parse.

Сомневаюсь, что можно всё. У каждого языка есть свои ограничения, поэтому чтобы реализовать некоторые вещи, придётся использовать другие способы и отказаться от каких-либо идей.

0

5

Marco_Polo написал(а):

В коре прописана причина недовольства

/// It is a compile-time error for any type other than [int] or [double]
/// to attempt to extend or implement `num`.

По сути, у тебя проигнорирована ошибка с extend. С другой стороны, ничего не мешает тебе использовать здесь просто num, аки

num getNum() {
  num numer;
  do {
    numer = num.tryParse(stdin.readLineSync());
  } while (numer == null);
  return numer;
}

Ну а если критично возвращать int \ double вот так вот красиво одной функцией, то увы.

Спасибо за ответ.

Идея в том, чтобы при вызове
getNumberFromConsoleInput<int>("res");
функция не позволяла ввести дробное значение. Только целое. А в реализации с num там пройдёт всё что угодно.

Судя по всему, компилятор не может гарантировать тот факт, что класс T, унаследованный от num, реализует метод tryParse / parse, поэтому вызов T.tryParse невозможен.

0

6

Demusenko Mykyta написал(а):

Судя по всему, компилятор не может гарантировать тот факт, что класс T, унаследованный от num, реализует метод tryParse / parse, поэтому вызов T.tryParse невозможен.

Косяки реализации иерархии классов в ядре?

0


Вы здесь » Dart » Dart Basics » Возможно ли подобное реализовать?