Идеальная переадресация в D?

tl; dr : Как сделать идеальную пересылку в D?


Ссылка имеет отличное объяснение, но, например, допустим, у меня есть этот метод:

void foo(T)(in int a, out int b, ref int c, scope int delegate(ref const(T)) d)
    const nothrow
{
}

Как мне создать другой метод, bar () , который может быть вызван вместо foo () , который впоследствии вызывает foo () «идеально» (т. е. без создания проблем с компиляцией / областью видимости и т. д. на вызывающем сайте)?

Наивный подход

auto bar(T...)(T args)
{
    writeln("foo() intercepted!");
    return foo(args);
}

, конечно, не работает, потому что он не обрабатывает ref , в , out ], inout , const -ность метода, чистая -ity, nothrow и т. Д., А также ограничивает как значения могут использоваться с r-значениями.

И я не знаю, как обрабатывать эти возможные случаи ... есть идеи?

-121 --- 16848 52-

Добавить два списка в Python Я пытаюсь сложить два списка, чтобы первый элемент одного списка добавлялся к первому элементу другого списка, со второго ко второму и так далее, чтобы сформировать новый список . В настоящее время у меня есть: def zipper (a, b): ...

Я пытаюсь сложить два списка, чтобы первый элемент одного списка добавлялся к первому элементу другого списка, со второго ко второму и т. Д. сформировать новый список.

В настоящее время у меня есть:

def zipper(a,b):
    list = [a[i] + b[i] for i in range(len(a))]
    print 'The combined list of a and b is'
    print list

a = input("\n\nInsert a list:")
b = input("\n\nInsert another list of equal length:")

zipper(a,b)

При вводе двух списков, один из которых является списком целых чисел, а другой - списком строк, я получаю ошибку типа «Невозможно объединить объекты str и int».

Я попытался преобразовать оба списка в строки, используя:

list = [str(a[i]) + str(b[i]) for i in range(len(a))]

, однако после ввода:

a = ['a','b','c','d']
b = [1,2,3,4]

я получил вывод как:

['a1', 'b2', 'c3', 'd4']

вместо того, что я хотел:

['a+1','b+2','c+3','d+4']

Есть ли у кого-нибудь предложения относительно того, что я делаю неправильно?

NB Мне нужно написать функцию, которая по сути будет выполнять то же самое, что и zip (a, b), но мне не разрешено использовать zip () где-либо в функции.

5
задан Bill the Lizard 18 July 2012 в 01:22
поделиться