我开始探索Scala,我所吸引的一件事就是Option能够消除null相关错误的类型和承诺.
但是,我还没有能够弄清楚如何将列表(或其他集合)Option[String]转换为集合String(显然过滤掉任何值None).
换句话说,我如何从中得到:
List[Option[Int]] = List(Some(1))
Run Code Online (Sandbox Code Playgroud)
......对此:
List[Int] = List(1)
Run Code Online (Sandbox Code Playgroud)
如果这对答案有任何影响,我正在使用Scala 2.8.
我正在尝试编写一个宏,它将根据给定的参数调用java setter方法.
所以,例如:
(my-macro login-as-fred {"Username" "fred" "Password" "wilma"})
Run Code Online (Sandbox Code Playgroud)
可能会扩展到类似以下内容:
(doto (new MyClass)
(.setUsername "fred")
(.setPassword "wilma"))
Run Code Online (Sandbox Code Playgroud)
你会怎么建议解决这个问题?
具体来说,我无法找到构造setter方法名称的最佳方法,并让它将其解释为宏的符号.
给定一个java包xyz,我可以将xyz别名为一个较短的名称,这样我就可以将包内的java类称为my-alias.MyJavaClass.
如果那是不可能的,我可以将import所有类都放入我的命名空间中,但我不想手动指定每个类的名称,并且clojure API文档似乎不清楚是否可以对import所有类进行操作.自动打包.
如果我有一组值(我将称之为x),以及x的多个子集:
求出所有可能的联合组合的最佳方法是什么,这些组合的联合等于x,但没有一个彼此相交.
一个例子可能是:
如果x是数字1到100的集合,我有四个子集:
那么可能的组合将是: