小编est*_*lua的帖子

如何将转换链的结果传递给函数?

我想写一个转换链,最后有一个块,我在那里用生成的集合做一些事情,而不使用变量.在集合上是否有一个更高阶的函数,它只提供它被调用到所提供函数的集合?

Query( ... )
  .map { ... }
  .filter { ... }
  .combinations(2)
  .pipeTo { col =>
     ...
     consolidate(col)
  }
Run Code Online (Sandbox Code Playgroud)

当然对于单个函数调用,可以这样做:

consolidate(
  Query()
    .map { ... }
    .filter { ... }
    .combinations(2)
)
Run Code Online (Sandbox Code Playgroud)

但是前者对我来说更自然,并允许例如容易注入一些条件.

我一直在使用的解决方法是在最后放置一个匹配子句:

Query()
  .map { ... }
  .filter { ... }
  .combinations(2)
  match { case lst =>
    ...
    consolidate(lst)
  }
Run Code Online (Sandbox Code Playgroud)

但由于这种模式经常发生,我想知道写这个的惯用方法是什么.

scala higher-order-functions

8
推荐指数
1
解决办法
1330
查看次数

Scala中的ADT子类型

是否有与Scala中使用的ADT模式的子类型的OO概念等效?特别是我想将方法​​添加到更专业的类型.例如,给定一个通用的List ADT:

sealed trait List[+A]
case class Cons[+A](h: A, t: List[A]) extends List[A]
case object Nil[Nothing]
Run Code Online (Sandbox Code Playgroud)

我想为特定类型的列表定义新方法:

sealed trait List[+A]
sealed trait DuckList extends List[Duck] {
    def feed(l: DuckList) = ...
}
Run Code Online (Sandbox Code Playgroud)

但是我还必须为这些新类型定义特殊的数据构造函数(DuckCons,DuckNil),并且由于case类不支持(case-to-case)继承,所以没有办法将DuckCons与泛型相关联这样可以在模式匹配中工作,因此为List定义的泛型方法不适用于DuckList.

generics scala algebraic-data-types

5
推荐指数
1
解决办法
482
查看次数

Clojure中记录的模式匹配

现在支持吗?我能找到的唯一信息是维基(https://github.com/clojure/core.match/wiki/Deftype-and-defrecord-matching)中的示例,它会产生错误:

CompilerException java.lang.AssertionError:无效的列表语法(Red.(Red.axb)yc)in(Black.(Red.(Red.axb)yc)zd).有效语法:[[:default:guard] [:或:default] [:default:only] [:default:seq] [:default:when] [:default:as] [:default:<<] [:default :clojure.core.match /载体]]

clojure pattern-matching

5
推荐指数
1
解决办法
531
查看次数

ReactJS因大型DOM的频繁更新而缓慢?

我们正在考虑React用于DOM重型项目,并想要弄清楚虚拟DOM渲染方法的性能特征.

我担心的一件事是虚拟DOM在每次微小的状态变化时都会重新计算.我可以看到这个模型的好处,但是在一个包含大量元素和频繁的次要更新的应用程序中,这会导致很多开销,就像"悬停"效果一样简单.

例如,这会渲染一系列Ndiv并更改CSS类onMouseOver.在我的系统上,它变得非常缓慢N=5000(http://jsfiddle.net/estolua/aopvp7zp/).

var D = React.DOM;

function generateItems(N) {
  return _.map(
    _.range(0, N), function (i) { return { id: '_' + i, content: '' + i }; }
  );
}

function toggle(x, y) { return (y && x!==y) ? y : null; }

var Item = React.createClass({
  render: function () {
    var item = this.props.item,
        appS = this.props.appState,
        focF = this.props.focF;
    return D.div({
        className: 'item' + (appS.focused === item.id ? ' …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

根据抽象val的成员定义val(Scala bug?)

我遇到了一个运行时错误,并想知道这是否是Scala中的错误,或者它是否至少应该在编译期间被捕获.此代码生成NullPointerException:

object Main extends App {
  trait A {
    val data: { val x: Int }
    val x = data.x
  }
  val a = new A {
    val data = new Object { val x = 42 }
  }
  a.x
}
Run Code Online (Sandbox Code Playgroud)

当然,通过使Axe懒惰或者很容易修复def,但是在这个最小的例子中可能很明显,在更现实的代码中,它可能有点令人困惑.

scala

3
推荐指数
1
解决办法
76
查看次数

在Scalaz中使用Free与非functor

在"FP in Scala"一书中,有一种将ADT S用作抽象指令集的方法

sealed trait Console[_]
case class PrintLine(msg: String) extends Console[Unit]
case object ReadLine extends Console[String]
Run Code Online (Sandbox Code Playgroud)

并将它们组合在一起,Free[S, A]然后S将其转换为IO monad.这可以用Scalaz的Free类型完成吗?似乎所有run方法都需要一个仿函数实例S.

design-patterns functional-programming scala algebraic-data-types scalaz

3
推荐指数
1
解决办法
810
查看次数

Scala中的部分应用程序不是引用透明的吗?

有两个功能:

def f(a: String, b: Int): Int = a.length + b
val g: Int => String = _.toString
Run Code Online (Sandbox Code Playgroud)

为什么它,我可以组成一个部分地施加fg通过中间分配的手段:

val f_ = f(_: String, 42)
f_ andThen g
// String => String = <function1>
Run Code Online (Sandbox Code Playgroud)

但不是直接:

f(_: String, 42) andThen g
// error: value andThen is not a member of Int
Run Code Online (Sandbox Code Playgroud)

这是类型推理器或某种预期行为的问题吗?

functional-programming scala

2
推荐指数
1
解决办法
152
查看次数

SQL中的通用和存在量化

有关系

X | Y
-------
a | i
a | ii
b | ii
b | ii
Run Code Online (Sandbox Code Playgroud)

如何查询

  1. 该组所有的X存在用于其一个Y长度2(应产生的{ a, b }
  2. X所有Y长度为2 的集合(应屈服{ b }

sql

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