scala - 构造具有相同结构的多个案例类的单个函数
问题描述
问题:我有一些案例类,对于每个案例类,我必须运行一个返回相同案例类实例的简单函数。因此,对于每个案例类,我每次都必须实现相同的功能,即使功能具有相同的功能。是否有迭代案例类类型的 SCALA 方式。
object SampleCaseClasses {
case class a(elem1: String, elem2: Int)
case class b(elem3: String, elem4: Int)
case class c(elem5: String, elem6: Int)
case class d(elem7: String, elem8: Int)
case class e(elem9: String, elem10: Int)
case class f(elem10: String, elem12: Int)
case class g(elem11: String, elem14: Int)
}
import SampleCaseClasses.{a, b}
def getProperAddress[a](host:String,port:Int): SampleCaseClasses.a ={
a(host.toUpperCase,port+1)
}
def getProperAddress[b](host:String,port:Int): SampleCaseClasses.b ={
b(host.toUpperCase,port+1)
}
解决方案
您可以将构造函数本身作为参数传递给getProperAddress
def getProperAddress[T](ctor: (String, Int) => T)(host: String, port: Int): T =
ctor(host, port)
由于它们都是案例类,因此您可以这样做,这仅比创建多个方法的原始解决方案(Scastie)多几个字符:
getProperAddress(a)("foo", 0)
对于非案例类,你需要这样的东西:
getProperAddress(new NotCaseClass(_, _))("foo", 1)
推荐阅读
- powershell - 脚本路径中的 Powershell 空格
- postgresql - 如何提高 Spring Data JPA 性能
- ruby-on-rails - (Rails)将带有初始数据的新模型添加到现有应用程序
- json - Python3 - Json 通过 Rest API 写入值
- c++ - OpenGL 应用程序在不同计算机上的工作方式不同
- javascript - 从 html 中向左滑动和向右滑动调用 id 并链接到 href,在数字图书中翻页
- python-3.x - MacOS Python 3.7 virtualenv 失败?
- sql-server - 通过 SQL Server 汇总每个 orderID 的文章
- c# - 使用 Circle CI 配置值插值?
- login - 如何通过 Selenium2Library 在浏览器中切换到新的“登录对话框”?