例:
void Sandwich(string ham, string bread, int cheese){
...do stuff...
};
Run Code Online (Sandbox Code Playgroud)
当我输入三明治时(我需要查看所需的参数是什么.我该怎么做?
我想提取一种类型,并用它来定义函数的返回类型。
例如。
让我们定义一个Container特征。
trait Container[T] {
def contained: T
}
Run Code Online (Sandbox Code Playgroud)
让我们定义一个Extra特征,这样我们就可以从我们的容器中扩展它。
trait Extra[T] {
def extra: T
}
Run Code Online (Sandbox Code Playgroud)
让我们定义一个特征ContainerExtractor为
trait ContainerExtractor[T, C <: Container[T]] {
def extract(container: C): T
}
Run Code Online (Sandbox Code Playgroud)
现在用户可以ContainerExtractor通过做来实现
new ContainerExtractor[String, Container[String] with Extra[Int]] {
override def extract(container: Container[String] with Extra[Int]): String = ???
}
Run Code Online (Sandbox Code Playgroud)
还不错,虽然用户需要在里面声明Container两次类型!
[String, Container[String] ... ]
为了解决这个重复问题,我试图通过重新定义Container和ContainerExtractor作为解决它
trait Container[T] {
def contained: T
final type Contained = T
}
trait …Run Code Online (Sandbox Code Playgroud) function ×1
java ×1
netbeans ×1
parameters ×1
scala ×1
shortcut ×1
traits ×1
type-alias ×1
types ×1