generics - scala 类型匹配

标签 generics scala pattern-matching

我想编写一个通用方法来获取 String 或 Int 的位置 x 处的元素。 现在我的问题是,如何强制 Scala 将 T 转换为 Int 或调用 Int 特定方法。

这是代码:

def key[T](elm:T,pos:Int) = elm match{
  case x:Int => {
    def digit(number:Int, pos:Int):Int = {
      if(pos == 0) number % 10
        else digit(number/10, pos-1)
    }
    digit(elm.toInt,(elm.toInt).length-pos-1)
  } 
  case x:String => (elm.toString).charAt(pos)
}

谢谢!

最佳答案

def key[T](elm:T,pos:Int) = elm match { 
    case x:Int => x.toString.charAt(pos) 
    case s:String => s.charAt(pos) 
}

使用 View 的解决方案:

implicit def i2s(i:Int):String = i.toString
def key2[T <% String](elm:T,pos:Int) = elm match { 
  case x:Int => x.charAt(pos) 
  case s:String => s.charAt(pos) 
}

关于generics - scala 类型匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6004677/

相关文章:

c# - 什么是标准的 Akka.Net 消息命令验证模式?

scala - Scala 中 AOP 风格的 Mixin 组合

java - 如何为返回带有泛型的函数的方法声明泛型

regex - 用丰富的字符串魔法从字符串中提取数字

java - 通用方法失败

java - 如何在 java 中参数化泛型单例

ios - 如何在 TableView 部分使用一个带有可选用例的枚举

java - 如何在 Play Framework 中预先选择单选按钮/复选框组?

scala - Scala中阻止调用的 future

regex - 这样匹配对吗?