我想避免在我见过的大多数木偶示例中使用的大量重复内容:
class foo(
String arg1 = '',
String arg2 = '',
...
){
if arg1 != '' {
...
}
if arg2...
}
更加务实的事情,如
class foo(
String arg1 = '',
String arg2 = ''
){
# $@ is like $@ in POSIX shell
$@.each {|k, v| if k[v] != '' { contain $v } }
}
答案 0 :(得分:1)
我所知道的构造等同于$@
,所以我建议将所有数据放入哈希而不是单独的参数。没有对正在执行的参数进行任何验证,因此类型Hash[Enum['network', 'mail', '...'], String]
的单个参数将与许多固定的String参数完全相同,即
class foo(
String $pre_class,
Hash[Enum['network', 'mail'], String] $classes = {},
){
由于您甚至不需要密钥,因此使用哈希的所有内容就足够了。 values()
是stdlib函数。
contain(values($classes))
Class[$pre_class] -> Class[values($classes)]
如果您需要删除空值,请使用filter() function:
$filtered_classes = $classes.filter |$type_name, $class_name| { $class_name != '' }
我应该补充一点,我不认为给定的课程是一个非常典型的课程。它是一个简介模块,设计得非常通用且可重复使用 - 可能是一个更典型的本地编写的配置文件模块,在这种程度上可以配置类名作为参数值,并且会更难编码行为。