Làm cách nào để sử dụng câu lệnh "đối sánh" để xác định giá trị của biến lớp? Sau đây là không hợp lệ, và tôi không thể tìm thấy một biến thể chấp nhận được - không phải là if ... else if ... else ...Làm cách nào để tôi có thể đối sánh các lớp học trong một tuyên bố "phù hợp" Scala?
val c: Class[_] = classOf[Int]
val what = c match { case classOf[Int] => "int!"; case classOf[Float] => "float!" }
Trình biên dịch phàn nàn: error: not found: type classOf
Và tất nhiên , tôi không thể sử dụng Class[Int]
vì đó loại thông tin bị xóa: biến thể
c match { case Class[Int] => "int!"; case Class[Float] => "float!" }
error: type Class of type Class does not take type parameters.
tôi cũng đã cố gắng như Int.class
, tất cả không có kết quả. (Và tôi không thực sự muốn chuyển đổi thành chuỗi: Tôi cảm thấy điều quan trọng là phải có trình biên dịch bắt các lớp đã được đổi tên/di chuyển.)
Tôi có bị dày đặc, hoặc tôi tình cờ gặp một điểm mù Scala?
Vâng, câu trả lời dưới đây là chính xác (và cảm ơn cho câu trả lời!) nhưng nó ngày càng xuất hiện * là * một loại lỗ xấu xí ở Scala. Các lớp là những người độc thân, vì vậy không có lý do gì bạn nên gán chúng cho các biến để phù hợp với chúng một cách hiệu quả - cũng không phải sử dụng một loạt các ifs, được viết như các bảo vệ hoặc các câu lệnh riêng biệt. Nhưng rõ ràng là vậy. – Tim