小编alt*_*han的帖子

为什么我们需要Monad而不是Monad

我正在玩Maybe和Either monad类型(链接,根据返回值应用条件函数,还返回链接函数失败的错误消息等).所以我觉得我们可以通过使用Either monad来实现相同和更多的事情.那么我的问题是那些之间的实际或概念上的区别?

monads haskell functional-programming either maybe

15
推荐指数
2
解决办法
1109
查看次数

Scala Stream与Java Stream Laziness的区别

我是懒惰评估概念的新手.当我在Scala中执行这行代码时;

"12334".grouped(1).toStream.filter{n => println("n:" +n ); n=="3";}
Run Code Online (Sandbox Code Playgroud)

打印出来:

n:1
n:2
n:3
Run Code Online (Sandbox Code Playgroud)

但是当我在Java中运行类似的东西时,例如:

List<String> myList = new ArrayList<>(Arrays.asList("12334".split("")));

Stream<String> myList2 = myList.stream().filter(a -> {System.out.println("a:" +a);return "3".equals(a);});
Run Code Online (Sandbox Code Playgroud)

它无声地终止,无需向控制台行写任何内容.Java的行为对我来说似乎更合理,因为Streams被懒惰地评估,我没有收集或尝试打印结果.但是在Scala中,即使我没有消耗流,它也会输出一些信息.所以我的问题是导致这种差异的原因是什么?

java scala lazy-evaluation java-8 java-stream

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

Scala如何获取最后一次计算的流量值?

根据scala docs,stream实现了惰性列表,其中元素仅在需要时进行评估.例;

val fibs: Stream[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map(n => { 
    n._1 + n._2
})  
Run Code Online (Sandbox Code Playgroud)

之后在scala repl中;

fibs(4)
fibs
Run Code Online (Sandbox Code Playgroud)

它会打印出来;

res1:Stream [BigInt] = Stream(0,1,1,2,3,?)

由于调用.length.last会导致无限循环,如何以最有效的方式获得值"3"(最后计算的值)?

scala stream memoization lazy-evaluation scala-streams

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

在 Scala 中传递惰性参数有什么帮助吗?

这听起来像是一个新手错误,但我做了很多。在将惰性求值块或值传递给函数时,如果我忘记以某种方式使该函数的相应参数变为惰性(按名称传递/调用),乍一看会引起一些混乱,因为它强制求值。

lazy val a = {println("a");1}
def myfunc(b:Int){println("hello")}
myfunc(a);
Run Code Online (Sandbox Code Playgroud)

输出:

a
Hello
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这个问题是否有任何编译器帮助?(标志等)或者这是我应该处理的事情?

scala lazy-evaluation scalac

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

Ramda通过链调用传递"可能"错误消息

假设我有一堆函数返回Just或Nothing值,我想将它们链接在一起;

var a = M.Just("5").map(function(data){
    return 1;
}).chain(function(data){
/*Make some operation return Just or Nothing */
    console.log(data);
    return M.Just(2);
}).chain(function(data){
/*Make some operation return Just or Nothing */
    console.log(data);
    return M.Nothing("Reason 1");
}).chain(function(data){
/*Make some operation return Just or Nothing */
    console.log(data);
    return M.Nothing("Reason 2");
}).getOrElse(function(data){
    console.log(data);
    return "Message";
});

console.log(a());
Run Code Online (Sandbox Code Playgroud)

输出:

>     1
>     2
>     undefined
>     Message
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,因为它在函数返回M.Nothing("Reason 1")的步骤失败,所以它没有通过我预期的其他函数.我相信Nothing没有有效的构造函数来获取参数.有没有办法在执行结束时获取此失败消息?我在民间故事中也试过这个,它与梦幻土地规格有关吗?

谢谢

javascript functional-programming ramda.js fantasyland ramda-fantasy

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

使用临时目录的 Spark 事务写入操作

根据databricks上的这篇博客,spark 依赖于 Hadoop 的提交协议类,因此如果由于某些故障而导致作业未完成,输出目录不会更改(部分输出文件不会发生)。

所以我的问题是;

在出现故障(HDFS、S3 等)时,spark 是否会阻止部分写入不同的存储?

在最终写入操作之前,不同的火花作业是否可以使用相同的临时位置?

多次提交的相同 Spark 作业是否可以使用相同的临时位置?

amazon-s3 hdfs apache-spark

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