Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Подключение С функции со значением по умолчанию


Автор: vadiml 4.10.2007, 21:36
Хочу подключить функцию на С, которая имеет в описании значение по умолчанию:
void func(int i1, int i2 = 0);

хотелось бы чтоб и перле можно было её вызывать и как func($i1, $i2), и как func($i1)

я сейчас для этого описываю в XS-файле 2 варианта:
Код

PROTOTYPES: DISABLE

void
func1(i1, i2)
    int i1
    int i2
    CODE:
        func(i1, i2);

void
func2(i1)
    int i1
    CODE:
        func(i1);


и потом  в pm-файле я их объединяю:
Код

sub func {
    return func1(@_) if scalar(@_) = 1;
    return func2(@_) if scalar(@_) = 2;
    croark("Usage func(i1) or func(i1, i2)\n");
}


использую это из-за того, что при генерации С файла на основе XS файла в начале функции добавляется проверка:
Код

if (items != 1)
        Perl_croak(aTHX_ "Usage: func(i1)");
и
if (items != 2)
        Perl_croak(aTHX_ "Usage: func(i1, i2)");


Может есть возможность отключить/обойти эту проверку, чтоб не надо было использовать 2 функции, а можно было сделать проверку внутри (что-то наподобие):
Код

void
func(i1, i2=0) # ???
    int i1
    int i2
    CODE:
        if ( items == 1 )
            func(i1);
        else if ( items == 2 )
            func(i1, i2);
        else
            Perl_croak(aTHX_ "Usage: func(i1) or func(i1, i2)");

?

самому С файл писать не хочется, да и не знаю пока как его сразу подключить.

Автор: arto 4.10.2007, 21:53
perldoc perlxs | less -p "Default Parameter Values"

Автор: vadiml 5.10.2007, 08:57
Спасибо

что-то я сам не досмотрел этого :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)