В некоторых функциях perl я хочу иметь возможность работать с различными типами аргументов и, конечно, относиться к ним по-разному. Теперь я использую для этой функции ref
и выполняю соответствующую часть кода на основании результата ref
, например.Perl - как создать функцию, которая принимает различные типы данных
sub method_that_accept_various_data_types(){
if (ref $_[0] eq "ARRAY"){
# ...
}
elsif (ref $_[0] eq "SCALAR"){
# ...
}
elsif (ref $_[0] eq "HASH"){
# ...
}
}
Есть некоторые элегантный способ, с помощью которого я могу сказать, что все мои функции должны следовать этому образцу, или я должен использовать указанный код в начале всех моих подпрограмм? Я пишу процедурный код, и я думаю, что что-то похожее - это полиморфизм и наследование в ООП, но я новичок в этой области.
Редактировать Все ответы должны добавить код ко всей вновь созданной функции. Я спрашиваю, есть ли какой-то общий способ сделать это для каждой функции, определенной с этого момента, без необходимости добавления кода в новую функцию.
Вы не должны выполнять такие функции, как они по своей сути являются ошибками – ikegami
Почему? Можете быть более конкретными? –
Потому что что-то может быть как хэш, так и массив (и т. Д.). Если вы не хотите предоставлять несколько функций, основывайте свой полиморфизм на количестве аргументов или имени аргументов (при использовании аргументов 'foo => $ foo'). – ikegami