如何将隐式参数传递给隐式类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将隐式参数传递给隐式类相关的知识,希望对你有一定的参考价值。

我想将隐式参数传递给我的pimped类型,就像我在实际类型中所做的那样。但由于隐式类只接受一个参数,因此我没有办法隐式地将参数传递给我的新类型。

package com.abc.xyz

class Pet(val petName: String){
  override def toString = petName
}

class PetLover(val name: String)(implicit val pet: Pet) {
  def showLove = s"${name} shows love, ${pet} waves tail"
}

我试图让PetLover皮条客进入PetTrainer并添加一个新方法列车:

package com.abc

import com.abc.xyz.PetLover

package object mno {
  implicit class PetTrainer(val trainer: PetLover) extends AnyVal{
    def train = s"${trainer.name} show hand," //${pet} high fives"
  }
}

我该怎么做才能让Pet隐含地使用PetTrainer?

答案

该值已通过trainer.pet提供:

def train = s"${trainer.name} shows hand, ${trainer.pet} high fives"

如果不是这种情况,您可以向train添加隐式参数:

def train(implicit pet: Pet) = s"${trainer.name} shows hand, ${pet} high fives"

以上是关于如何将隐式参数传递给隐式类的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数传递给 Laravel 5 中的隐式控制器?

scala中隐式转换之隐式类

隐式类类型转换以及如何避免隐式转换

Scala 隐式类必须有一个主构造函数,在第一个参数列表中只有一个参数

如何在 Java 中使用 Scala 隐式类

如何在 Java 中使用 Scala 隐式类