我想在Scala中以递归方式反转列表列表.
我在Python中编写了深度列表反转,如下所示:
def deepReverse(items):
if type(items) == list:
return [deepReverse(item) for item in reversed(items)]
else:
return items
Run Code Online (Sandbox Code Playgroud)
我如何在Scala中完成相同的操作?问题不在于算法 - 它是类型的东西,我是新的.
我需要函数将[T]或List [List [T]]的列表,或T的列表和Ts列表,任意深度.我尝试根据我在其他地方看到的一个例子来创建一个案例类.我不想要一个只返回Any并接受Any的函数; 感觉像是作弊.
case class NL[+T](val v : Either[List[NL[T]],T])
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还是无法让我的类型得到平衡.我是Scala的新手,但我认为这是一个混乱递归和打字的绝佳机会.
我正在尝试安装两件事:
一个名为"mongo"的PHP-PECL模块,以及一个名为"mongo"的yum包.他们需要使用"name"变量来知道包的真实名称是什么,但使用此名称创建的别名puppet使得无法处理多个提供者.
我知道我必须给他们不同的资源名称,所以很自然地,我这样做了:
package { "php-mongo" :
ensure => installed,
provider => 'pecl',
name => 'mongo'
}
package { "yum-mongo" :
ensure => installed,
provider => 'yum',
name => 'mongo'
}
Run Code Online (Sandbox Code Playgroud)
因为我收到错误:
Cannot alias Package[php-mongo] to ["mongo"] at /etc/puppet/environments/testing/modules/packages/manifests/install.pp:52; resource ["Package", "mongo"] already declared at /etc/puppet/environments/testing/modules/packages/manifests/install.pp:52
Run Code Online (Sandbox Code Playgroud)
如何在不修补stdlib的情况下完成这项工作?我是否需要修改我的提供程序,因此如果我将其包含在名称中以避免冲突,他们可以删除前置的"php-"?那看起来很蠢!
经过研究,这是一个古老的旧bug,但我找不到任何方法!
谢谢!