说,我有以下几点:
trait SomeTrait {
def someMethod: String;
}
object SomeObject extends SomeTrait {
def someMethod = "something";
}
Run Code Online (Sandbox Code Playgroud)
我想使用反射调用"someMethod",因为我将对象名称作为String.就像是:
val objectName = "SomeObject"
val someTrait:SomeTrait = ???.asInstanceOf[SomeTrait]
someTrait.someMethod
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
谢谢
比方说,我有一堆"验证"函数,如果没有错误则返回None,否则返回Some(String)指定错误消息.像下面这样的东西......
def validate1:Option[String]
def validate2:Option[String]
def validate3:Option[String]
Run Code Online (Sandbox Code Playgroud)
我将按顺序调用它们,一旦返回Some(String),我就会停止并返回相同的内容.如果它返回None,我会转到下一个,直到序列结束.如果所有这些都返回None,则返回None.
我想把它们粘在一起"表达".就像是 ...
for( a <- validate1; b <- validate2; c <- validate3) yield None;
Run Code Online (Sandbox Code Playgroud)
但是,Option完全与我想要的相反.它在None处停止,并以Some(String)跟随.
我怎样才能实现这样的目标?
比方说,我有一个带有执行方法的通用命令trait,它接受一个Input并返回一个Output.就像是
trait Input;
trait Output;
trait Command[I <: Input, O <: Output] {
def execute(input: I): O;
}
Run Code Online (Sandbox Code Playgroud)
然后,我将创建各种命令,类似于
class SampleInput extends Input
class SampleOutput extends Output
class SampleCommand extends Command[SampleInput, SampleOutput] {
def execute(input:SampleInput):SampleOutput = new SampleOutput()
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是,我可以创建命令与SampleAInput和SampleBOutput编译器会接受愉快.我如何强制执行,以便编译器因类型不匹配错误而失败?
不知何故,我需要在类型下进行分组Input并Output传递该类型以创建命令.我怎么做?
我想提出类似于以下内容的东西:
val s: Validation[String, Int] = 1.success
def s2(i: Int): Validation[String, Int] = i.success
val result = for {
i <- s
j <- List(1, 2)
k <- s2(j)
} yield "fine";
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译,我理解,从语法上讲它没有意义.
我试图以monadic方式执行验证列表.我如何实现这一目标?