函数根据Perl中的输入返回2种类型。这是一个好方法吗?

函数根据Perl中的输入返回2种类型。这是一个好方法吗?,perl,Perl,我设计了一个函数,可以根据输入参数返回两种不同的类型 ex: &Foo(12,"count") -> returns record count from DB for value 12 &Foo(12,"details") -> returns resultset from DB for value 12 in hash format 我的问题是这是一个好方法吗?在C#中,我可以通过函数重载来实现 请想一想,您的代码中的哪一部分通过以下方式变得更容易

我设计了一个函数,可以根据输入参数返回两种不同的类型

ex: &Foo(12,"count")   -> returns record count from DB for value 12  
    &Foo(12,"details") -> returns resultset from DB for value 12 in hash format

我的问题是这是一个好方法吗?在C#中,我可以通过函数重载来实现

请想一想,您的代码中的哪一部分通过以下方式变得更容易

Foo(12, "count")
而不是

Foo_count(12)
我能想到的唯一情况是当函数名(“count”)本身是输入数据时。即使这样,您也可能希望对其执行一些验证,可能是通过函数表查找

除非这是一个中间层,它只接受一个命令名并传递它,否则我将使用两个单独的函数


此外,Foo函数的实现将查看命令名,然后将每个命令拆分为一个私有函数,对吗?

请思考代码的哪一部分更容易

Foo(12, "count")
而不是

Foo_count(12)
我能想到的唯一情况是当函数名(“count”)本身是输入数据时。即使这样,您也可能希望对其执行一些验证,可能是通过函数表查找

除非这是一个中间层,它只接受一个命令名并传递它,否则我将使用两个单独的函数


此外,Foo函数的实现将查看命令名称,然后无论如何都将其分割成一个私有函数,对吗?

< P>另外,如果您需要列表,则可以考虑让FO返回细节。
return wantarray ? ($num, @details) : $num;

另外,如果你想要一个列表,你可能会想让FO返回细节。

return wantarray ? ($num, @details) : $num;

它是否使代码变得过于复杂和/或难以正确维护或使用?如果有任何部分是真的,我不会认为这是一个好方法。但我想让它尽可能简单,因此我尝试了这种方法。谢谢你需要提供更多的信息。这是仅有的两种模式还是更多的模式?这是否会使代码变得过于复杂和/或难以正确维护或使用?如果有任何部分是真的,我不会认为这是一个好方法。但我想让它尽可能简单,因此我尝试了这种方法。谢谢你需要提供更多的信息。这是仅有的两种模式还是更多模式?如果要返回数组,通常最好将数组中的所有项设置为相同的类型(即,仅设置数据项,而不是计数,然后设置数据项)。在这种情况下,这是双倍的,因为调用者只需在标量上下文中计算返回的数组,就可以得到项目的计数,所以随数组一起返回不会得到任何结果(即,只计算数据项,而不是计数,然后是数据项)。在这种情况下,这是双倍的,因为调用者只需在标量上下文中计算返回的数组,就可以获得项目的计数,因此,将其与数组一起返回,不会得到任何结果。