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

时间:2018-10-21 14:39:00

标签: scala design-patterns implicit

我想像在实际类型中一样,将隐式参数传递给我的固定类型。但是由于隐式类只接受一个参数,所以我没有办法将参数隐式传递给我的新类型。

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"
  }
}

如何使PetTrainer隐式地使用Pet?

1 个答案:

答案 0 :(得分:0)

该值已通过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"