我正在为ScalaTest开发一个客户可读的DSL.目前我可以写
feature("Admin Login") {
scenario("Correct username and password") {
given("user visits", classOf[AdminHomePage])
then(classOf[SignInPage], "is displayed")
Run Code Online (Sandbox Code Playgroud)
但这会更好看
feature("Admin Login") {
scenario("Correct username and password") {
given("user visits", the[AdminHomePage])
then(the[SignInPage], "is displayed")
Run Code Online (Sandbox Code Playgroud)
有什么办法吗?
def the[T] =
Run Code Online (Sandbox Code Playgroud)
回来classOf[T]
?
Jea*_*let 17
你可以试试这个:
def the[T: ClassManifest]: Class[T] =
classManifest[T].erasure.asInstanceOf[Class[T]]
Run Code Online (Sandbox Code Playgroud)
符号[T: ClassManifest]
是一个上下文绑定,相当于:
def the[T](implicit classManifest: ClassManifest[T])
Run Code Online (Sandbox Code Playgroud)
对于隐值Manifest[T]
和ClassManifest[T]
由编译器自动填充(如果它可以具体化传递到方法的类型参数),给你的运行时间有关T
:ClassManifest
只给出了作为消失Class[_]
,并且Manifest
还可以告诉你有关的可能的参数化T
本身(例如,如果T
是Option[String]
,那么你也可以了解这String
部分).
您可能想要做的只是在导入时重命名该方法(在对象中定义Predef
):
import Predef.{ classOf => the, _ }
Run Code Online (Sandbox Code Playgroud)
请注意,如果您像这样重命名它,则 classOf 将不再起作用。如果您仍然需要它,还需要添加此导入:
import Predef.classOf;
Run Code Online (Sandbox Code Playgroud)
有关更多重命名的好处,请参阅:
归档时间: |
|
查看次数: |
369 次 |
最近记录: |