小编san*_*jib的帖子

如何使用反射调用Scala Object方法?

说,我有以下几点:

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)

或类似的东西.

谢谢

reflection scala object

33
推荐指数
3
解决办法
2万
查看次数

如何反转Option Monad的流量?

比方说,我有一堆"验证"函数,如果没有错误则返回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)跟随.

我怎样才能实现这样的目标?

scala scala-option

8
推荐指数
2
解决办法
1518
查看次数

如何使以下代码类型安全?

比方说,我有一个带有执行方法的通用命令trait,它接受一个I​​nput并返回一个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)

这里的问题是,我可以创建命令与SampleAInputSampleBOutput编译器会接受愉快.我如何强制执行,以便编译器因类型不匹配错误而失败?

不知何故,我需要在类型下进行分组InputOutput传递该类型以创建命令.我怎么做?

types scala

6
推荐指数
2
解决办法
637
查看次数

scalaz验证和列出monad

我想提出类似于以下内容的东西:

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方式执行验证列表.我如何实现这一目标?

validation scala scalaz

6
推荐指数
1
解决办法
1891
查看次数

标签 统计

scala ×4

object ×1

reflection ×1

scala-option ×1

scalaz ×1

types ×1

validation ×1