Scala模式匹配类型参数

时间:2016-02-03 16:00:14

标签: scala pattern-matching type-erasure type-parameter generic-type-argument

我想摆脱此示例代码的类型擦除警告:

public function uploadAction(
    Request $request
) {
    $authorImage = $this->authorImageFactory->create();
    $authorImage->setAuthor($author);
    $form = $this->formFactory->create('AppBundle\Form\Type\AuthorImageType', $authorImage);

它编译并正常工作,但有警告:

  

警告:(31,13)类型模式中的非变量类型参数Int   Seq [Int](Seq [Int]的基础)是未选中的,因为它是   通过擦除消除       情况b:Seq [Int] => b.map(c => println(2 * c))               ^

在这种情况下,你有什么简单的解决办法来避免擦除吗?

到目前为止我尝试了什么(符合this):

val a: Seq[Any] = Seq(1)
a match {
  case b: Seq[Int] => b.map(c => println(2 * c) )
  case _ => println("Not matched")
}

但它不会编译,因为c现在是Any类型。

我相信这个问题有几个解决方案。我会接受最简单的一个。

3 个答案:

答案 0 :(得分:0)

  case b: Seq[Int @unchecked] => b.map(c => println(2 * c))

将摆脱警告。但它不会解决潜在的擦除问题。 Seq("1")将符合此案例。

答案 1 :(得分:0)

我有同样的问题,我最终做了这样的事情(找不到更漂亮的东西):

x

答案 2 :(得分:0)

我不确定这是一个最简单的解决方案,但我认为最好将类型与if payer_contract(params[:payer_type]) = render 'bpci_form' else = render 'global_form' s匹配

TypeTag