Scala适用于没有参数
发布时间:2020-12-16 09:07:38 所属栏目:安全 来源:网络整理
导读:我想创建一个在请求时生成随机内容的程序,例如下面示例中的字母.我已经定义了一个带有伴随对象的抽象类来返回其中一个子类. abstract class Letter class LetterA extends Letter { override def toString = "A" } class LetterB extends Letter { override
我想创建一个在请求时生成随机内容的程序,例如下面示例中的字母.我已经定义了一个带有伴随对象的抽象类来返回其中一个子类.
abstract class Letter class LetterA extends Letter { override def toString = "A" } class LetterB extends Letter { override def toString = "B" } class LetterC extends Letter { override def toString = "C" } object Letter { def apply = RNG.d(3) match { case 1 => new LetterA case 2 => new LetterB case 3 => new LetterC } override def toString = "Random Letter" } 我的梦想是,我将能够使用Letter来获得A,B或C类型的随机字母.但是使用此代码,它只会给我一个字母对象. Letter.apply给了我A,B或C但是很难看. 如果我将apply函数更改为apply()然后事情会好一点,因为我可以使用Letter()来获取我的随机字母之一,但Letter仍然给了我这个对象. 有什么我可以做的,所以给Letter写的东西实际上解析为LetterA,LetterB或LetterC之一? 解决方法
回答你的问题是不,你不能区分Letter.type和Letter.apply,所以你需要一个解决方法.
我建议你使用Type-Class模式,它比为随机对象添加随机生成的apply方法更加灵活. trait RandomGenerator[T] { def gen: T } implicit object RandomLetter extends RandomGenerator[Letter] { private val rnd = new Random() def gen = (rnd.nextInt(3) + 1) match { case 1 => new LetterA case 2 => new LetterB case 3 => new LetterC } } def random[T: RandomGenerator]: T = implicitly[RandomGenerator[T]].gen println(random[Letter]) println(random[Letter]) println(random[Letter]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |