小编Ral*_*lph的帖子

Scala tailrec注释错误

我有一个Java抽象类ImmutableEntity和几个包含类级注释的子类@DBTable.我试图使用尾递归Scala方法搜索类层次结构中的注释:

  def getDbTableForClass[A <: ImmutableEntity](cls: Class[A]): String = {
    @tailrec
    def getDbTableAnnotation[B >: A](cls: Class[B]): DBTable = {
      if (cls == null) {
        null
      } else {
        val dbTable = cls.getAnnotation(classOf[DBTable])
        if (dbTable != null) {
          dbTable
        } else {
          getDbTableAnnotation(cls.getSuperclass)
        }
      }
    }

    val dbTable = getDbTableAnnotation(cls)
    if (dbTable == null) {
      throw new
              IllegalArgumentException("No DBTable annotation on class " + cls.getName)
    } else {
      val value = dbTable.value
      if (value != null) {
        value …
Run Code Online (Sandbox Code Playgroud)

annotations scala tail-recursion

4
推荐指数
1
解决办法
2681
查看次数

Clojure:测试地图操作中的每个值是否真实

如何测试返回的集合中的每个值map是否为真?

我使用以下内容:

(defn test [f coll]
  (every? #(identity %) (map f coll)))
Run Code Online (Sandbox Code Playgroud)

用匿名函数#(identity %),但我想知道是否有更好的方法.

我不能用,(apply and ...)因为and是一个宏.

更新:顺便说一句,我在做我的方式通过的哈斯克尔路逻辑,数学和编程,由基斯Doets和Jan可·艾克,但这样做在Clojure的练习.这是一本非常有趣的书.

functional-programming clojure map

4
推荐指数
1
解决办法
495
查看次数

从数据库表中填充Scala不可变映射

我有一个SQL数据库表,具有以下结构:

create table category_value (
  category varchar(25),
  property varchar(25)
);
Run Code Online (Sandbox Code Playgroud)

我想将其读入Scala Map[String, Set[String]],其中地图中的每个条目都是同一类别中所有属性值的集合.我想以"功能"样式进行,没有可变数据(数据库结果集除外).

继Clojure loop构造之后,我提出了以下内容:

def fillMap(statement: java.sql.Statement): Map[String, Set[String]] = {
    val resultSet = statement.executeQuery("select category, property from category_value")

    @tailrec
    def loop(m: Map[String, Set[String]]): Map[String, Set[String]] = {
      if (resultSet.next) {
        val category = resultSet.getString("category")
        val property = resultSet.getString("property")
        loop(m + (category -> m.getOrElse(category, Set.empty)))
      } else m
    }

    loop(Map.empty)
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,而不使用可变数据结构?

functional-programming scala

4
推荐指数
2
解决办法
3850
查看次数

记录Scala功能链

Scala(以及函数式编程,通常)提倡一种编程风格,您可以在其中生成表单的功能"链"

collection.operation1(...).操作2(...)...

其中所述操作是的各种组合map,filter等等.

如果等效的Java代码可能需要50行,则Scala代码可以在1行或2行中完成.功能链可以将输入集合更改为完全不同的输入集合.

Scala代码的缺点是10分钟后(从不介意6个月后),我无法弄清楚我在想什么,因为符号是如此紧凑,并且缺少类型信息(因为隐含类型).

你怎么记录这个?您是否在链条之前放置了一个大块注释,将优雅的1线解决方案转换为由39行评论组成的庞大的40行解决方案?你是否像这样穿插你的评论?

collection.
  // Select the items that meet condition X
  filter(predicate_function).
  // Change these items from A's to B's
  map(transformation_function).
  // etc.
Run Code Online (Sandbox Code Playgroud)

别的什么?没有文件?(让他们猜测.他们永远不会"缩小"你,因为没有其他人可以维护代码.:-))

documentation functional-programming scala

4
推荐指数
3
解决办法
1984
查看次数

在Scala中将类限制为特征和结构子类型

我需要限制Scala方法参数,以便它实现特征和结构子类型.我怎样才能做到这一点?

trait Foo
// ...
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我该代替xxx什么?我都尝试extendswith,但有语法错误.

可以使用type结构子类型的定义来完成吗?

scala subtype

4
推荐指数
2
解决办法
416
查看次数

集合的Java ConcurrentHashMap的模式

我在多线程应用程序中常用的数据结构是ConcurrentHashMap,我想在其中保存一组共享相同键的项.安装特定键值的第一项时会发生此问题.

我一直使用的模式是:

final ConcurrentMap<KEYTYPE, Set<VALUETYPE>> hashMap = new ConcurrentHashMap<KEYTYPE, Set<VALUETYPE>>();
// ...
Set<VALUETYPE> newSet = new HashSet<VALUETYPE>();
final Set<VALUETYPE> set = hashMap.putIfAbsent(key, newSet)
if (set != null) {
  newSet = set;
}
synchronized (newSet) {
  if (!newSet.contains(value)) {
    newSet.add(value);
  }
}
Run Code Online (Sandbox Code Playgroud)

这种操作有更好的模式吗?这是否是线程安全的?是否有更好的课程用于内心而Set不是java.util.HashSet

java concurrenthashmap concurrent-programming

4
推荐指数
1
解决办法
2121
查看次数

使用Applicative Functor匹配3个Scala Regex中的至少一个

我有三个Scala正则表达式,我需要测试它们是否与给定的String匹配.

我知道我可以做以下事情:

val matches = R1.findFirstIn(myString).isDefined ||
              R2.findFirstIn(myString).isDefined ||
              R3.findFirstIn(myString).isDefined
Run Code Online (Sandbox Code Playgroud)

但我相信有一种方法可以使用Scalaz库中的Applicative Functor或Monad来实现.

如何才能做到这一点?

regex scala scalaz applicative

4
推荐指数
1
解决办法
223
查看次数

SublimeREPL scala错误

我安装了SublimeREPL,但每次尝试启动REPL时,都会出现一个对话框,显示错误"OSError(2,'No such file or directory')".

我使用MacPorts安装了Scala 2.10.

我正在运行OS X Lion(10.8.3).

是否有一些特殊的配置我需要告诉SublimeREPL在哪里可以找到Scala可执行文件?

scala runtime-error sublimetext2 sublimerepl

4
推荐指数
1
解决办法
1868
查看次数

过滤(A,选项[B])列表并从Option中提取值

我有一个List[(A, Option[B])].我想过滤掉None第二个元素中包含a的所有元组然后"展开" Option,给出一个List[A, B].

我目前正在使用这个:

list.filter(_._2.isDefined).map(tup => (tup._1, tup._2.get))
Run Code Online (Sandbox Code Playgroud)

有更好的方法(更简洁)吗?

functional-programming scala filter

4
推荐指数
1
解决办法
77
查看次数

在 Elm 中没有消息的 Cmd

是否可以Cmd在 Elm 中创建一个在完成时不发送消息的对象?

具体来说,我试图让一个元素(以编程方式)获得焦点,但我不需要被告知结果:

Dom.focus "element-id"
    |> Task.attempt FocusReceived
...
FocusReceived result ->
    model ! []  -- result ignored
Run Code Online (Sandbox Code Playgroud)

有没有办法让 Elm“引擎”在此之后不发送消息Cmd

我知道我的代码 ( FocusReceived result -> model ! []) 是空操作,但我希望根本不发送消息。

feedback no-op elm

4
推荐指数
1
解决办法
720
查看次数