2008-10-10 15 views

Trả lời

6

Lưu ý: câu trả lời này đã lỗi thời!

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. 

+0

Các chàng trai có thật sự tốt đẹp! – svrist

+1

là sai. xem câu trả lời về tệp kê khai – Alexey

2

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

6

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.

+0

Điều này dường như không hoạt động đối với tôi mà không có tham số giá trị 't' – acjay

+0

Nếu sử dụng scala 2.10 trở lên, bạn có thể sử dụng' TypeTag' để thay thế. Tham khảo câu trả lời 'TypeTag'. – Julie

8

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 vấn đề liên quan