Trong Scala, có thể lấy biểu diễn chuỗi của một kiểu khi chạy không? Tôi đang cố gắng thực hiện điều gì đó dọc theo các dòng sau:Nhận biểu diễn chuỗi của một kiểu khi chạy trong Scala
def printTheNameOfThisType[T]() = {
println(T.toString)
}
Trong Scala, có thể lấy biểu diễn chuỗi của một kiểu khi chạy không? Tôi đang cố gắng thực hiện điều gì đó dọc theo các dòng sau:Nhận biểu diễn chuỗi của một kiểu khi chạy trong Scala
def printTheNameOfThisType[T]() = {
println(T.toString)
}
hãy xem câu trả lời bằng TypeTag cho Scala 2.10 trở lên
Tôi có thể khuyên #Scala trên freenode
10:48 <seet_> http://stackoverflow.com/questions/190368/getting-the-string-representation-of-a-type-at-runtime-in-scala <-- isnt this posible?
10:48 <seet_> possible
10:48 <lambdabot> Title: Getting the string representation of a type at runtime in Scala - Stack Overflow,
http://tinyurl.com/53242l
10:49 <mapreduce> Types aren't objects.
10:49 <mapreduce> or values
10:49 <mapreduce> println(classOf[T]) should give you something, but probably not what you want.
Xin lưu ý rằng đây không phải là thực sự "điều : "
object Test {
def main (args : Array[String]) {
println(classOf[List[String]])
}
}
cho
$ scala Test
class scala.List
Tôi nghĩ bạn có thể đổ lỗi này trên tẩy xoá
==== EDIT ==== Tôi đã cố gắng làm việc đó với một phương pháp với một tham số kiểu chung chung:
object TestSv {
def main(args:Array[String]){
narf[String]
}
def narf[T](){
println(classOf[T])
}
}
Và trình biên dịch sẽ không chấp nhận nó. Các loại lớp học không phải là giải thích
Có một tính năng mới, hầu như không có giấy tờ được gọi là "tệp kê khai" trong Scala; hoạt động như sau:
object Foo {
def apply[T <: AnyRef](t: T)(implicit m: scala.reflect.Manifest[T]) = println("t was " + t.toString + " of class " + t.getClass.getName() + ", erased from " + m.erasure)
}
Ràng buộc AnyRef chỉ có để đảm bảo giá trị có phương thức .toString.
Trong Scala 2.10 trở lên, hãy sử dụng TypeTag
, chứa thông tin loại đầy đủ. Bạn sẽ cần phải bao gồm các thư viện scala-reflect
để làm điều này:
import scala.reflect.runtime.universe._
def printTheNameOfThisType[T: TypeTag]() = {
println(typeOf[T].toString)
}
Bạn sẽ nhận được kết quả như sau:
scala> printTheNameOfThisType[Int]
Int
scala> printTheNameOfThisType[String]
String
scala> printTheNameOfThisType[List[Int]]
scala.List[Int]
Các chàng trai có thật sự tốt đẹp! – svrist
là sai. xem câu trả lời về tệp kê khai – Alexey