LINUX.ORG.RU

А правда ли, что...

 , ,


0

3

... в Python нет аналога Perl'овского оператора redo (который возвращает управление в начало блока, в котором он находится)?



Последнее исправление: CYB3R (всего исправлений: 2)
Ответ на: комментарий от makyrros

Тред не читал. Но Я бы сделал так:

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;

#
# $do = [{ input => action }, ...]
#

sub user_do_input {
	my $do = shift;
	my $in = ~~<>;
	chomp $in;

	if(grep { $_->{input} eq $in } @{$do}){
		for (@{$do}){
			&{$_->{action}}($in) if $in eq $_->{input};
		}
	} else {
		user_do_input($do);
	}
}

user_do_input([{ input => 1, action => sub { say "Called!" }}, { input => 3, action => sub { say "Called ". shift. "!" }}]);
joy4eg ★★★★★
()
Ответ на: комментарий от joy4eg
sub user_do_input {
	my $do = shift;
	my $in = ~~<>;
	chomp $in;

	my $list = [ grep { $_->{input} eq $in } @{$do} ];
	if(~~@{$list}){
		&{$_->{action}}($in) for @{$list};
	} else {
		user_do_input($do);
	}
}
joy4eg ★★★★★
()
Ответ на: комментарий от gh0stwizard

С grep мы сразу получим список, с нужными нам action's, для введенного input, т.е. всего ОДНА проверка, избегая таким образом множества проверок в when().

joy4eg ★★★★★
()
Ответ на: комментарий от AIv

достаем в нем исходный код через интроспекцию и дальше ваяем из него че хотим

Так и в перле можно, причём на этапе «компиляции».

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

В пайтоне это тоже будет на этапе компиляции исходника в байткод. Интерпретатор работает с байткодом, в котором вместо исходных функций будут находиться уже обертки над ними.

Virtuos86 ★★★★★
()
Ответ на: комментарий от bug

while str == <условие> print («Word»)
while str == <условие> print («Digit»)

ня?

anonymoos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.