Вы должны ввести два параметра типа в сигнатуру функции, один для Fn
и один для Future
, например
#![feature(futures_api, async_await)]
async fn foo() {}
fn run<G: std::future::Future, F: FnOnce() -> G>(f: F) {
f();
}
fn main() {
bar(foo)
}
Вы можете заменить FnOnce
на Fn
или FnMut
в зависимости от ваших потребностей.
Необходимо выйти из разделителя для qr//, и необходимо выйти из любых regex метасимволов, которые Вы хотите использовать в качестве литералов. Если Вы хотите, чтобы это было литеральным *, необходимо выйти из них, так как * regex квантор.
Вашей проблемой здесь являются различные флаги regex, которые Вы добавили./m ничего не делает, потому что Вы не используете начало - или привязки конца строки (^, $)./s ничего не делает, потому что Вы не используете подстановочный знак. метасимвол./x делает весь пробел в Вашем regex бессмысленном, и это поворачивает ту строку с # в комментарий regex.
Это - то, что Вы хотите с удаленными флагами regex, и надлежащие вещи вышли:
my $sc = qr{(>|\s)};
my $re = qr{# using defaults found in \.config
\*
\*
Options:
$sc 1\. opt1
$sc 2\. opt2
choice\[1-2\?]: };
Хотя Damian Conway говорит людям в Лучших практиках Perl всегда помещать эти опции на свой regexes, Вы теперь видите, почему он неправ. Необходимо только добавить их, когда Вы хотите то, что они делают, и необходимо только добавить вещи, когда Вы знаете то, что они делают.:) Вот то, что Вы могли бы сделать, если Вы хотите использовать/x. Необходимо выйти из любого литерального пробела, необходимо обозначить окончания строки так или иначе, и необходимо выйти из литерала # символ. Что было читаемо, прежде чем будет теперь путаница:
my $sc = qr{(>|\s)}; my $eol = qr{[\r\n]+}; my $re = qr{\# \s+ using \s+ defaults \s+ found \s+ in \s+ \.config $eol \* $eol \* $eol Options: $eol $sc \s+ 1\. \s+ opt1 $eol $sc \s+ 2\. \s+ opt2 $eol choice\[1-2\?]: \s+ }x; if ( $output =~ $re ) { print "OK!\n"; } else { print "D'oh!\n"; }
Как сказанный brian, необходимо выйти из разделителя и regex метасимволов. Отметьте это при использовании qr//x
(который Вы), необходимо также выйти из пробельных символов и # (который является маркером комментария). Вы, вероятно, на самом деле не хотите использовать /x
здесь. Если Вы хотите быть в безопасности, можно выйти из любого небуквенно-цифрового знака.
Походит на то, что Вы действительно хотите, Ожидают, но вещью, которую Вы наиболее ищете, является quotemeta оператор, который выходит из всех символов, которые имеют особые значения к regex.
Отвечать на Ваш вопрос непосредственно (однако), в дополнение к закрывать кавычки символу (в этом случае }
) необходимо выйти как минимум, .[$()|*+?{\