作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想编写一个函数,该函数的行为取决于其类型参数。
下面是我想要的一个简单示例:
def f[Int] = "I'm an int"
def f[Float] = "I'm a float"
def f[Burger] = "You want fries with that?"
最佳答案
不直接在Scala中执行此操作的通常方法是使用类型类。
trait FAble[T] { def doF: String }
object FAble {
implicit val fInt = new FAble[Int] { def doF = "I'm an int" }
implicit val fFloat = new FAble[Float] { def doF = "I'm a float" }
implicit val fBurger = new FAble[Burger] { def doF = "You want fries?" }
}
def f[T](implicit ev: FAble[T]) = ev.doF
// or
def f[T: FAble] = implicitly[FAble[T]].doF
implicit def
而不是
val
),并且任何给定类型的实例都可以有多个,这使您可以选择行为通过在代码的不同点使作用域具有不同的实例。
@specialized
,因为它也不执行您想要的操作)。因此,说“嘿编译器,当您在该位置看到一个Int时,而不是从通用模板生成代码,而是使用此特定代码”是没有意义的。
关于scala - 我可以像使用C++模板特化一样专门化Scala中的函数类型参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680495/
我有一个带有模板函数的基类,该函数具有通用模板类型和专用版本。 #ifndef BASE_CLASS #define BASE_CLASS #include using namespace std;
我有这个 3D vector 模板 template class Vec3TYPE{ public: union{ struct{ TYPE x,y,z; }; struct{ TY
我是一名优秀的程序员,十分优秀!