Как определить переменную типа "функция"? (используя опциональный набор текста)
В дартсе функции первого класса. Документация говорит нам, что вы можете создать переменную, такую как эта:
var loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
создать функцию с именем "loudify", которая принимает строку и возвращает другую строку.
Если я заранее не знаю, какую функцию я хочу назначить переменной, я могу сделать это так:
// define the variable
var loudify;
// later on set the variable
loudify = (msg) => '!!! ${msg.toUpperCase()} !!!';
Но как мне использовать необязательную типизацию, чтобы позже я знал, что переменная имеет тип "функция" и имеет входную строку и выходную строку? Я хотел бы предложить что-то вроде этого, но это не работает (редактор дротиков говорит мне "неопределенный класс" функция ""):
// this gives a syntax error in the Dart editor
function<String, String> loudify;
Так какой здесь правильный синтаксис?
С Уважением,
Хендрик
1 ответ
Решение
Ты можешь использовать typedef
typedef String OneString(String x);
typedef String OneStringAndInt(String x, int y);
void main() {
//var f = (String x) => '$x';
var f = (String x, int y) => '$x$y';
if(f is OneString) {
print(f('bla'));
} else {
print(f('bla', 10));
}
}