小编gor*_*ral的帖子

用于理解和功能创建的数量

最近我接受了Scala Developer职位的采访.我被问到这样的问题

// matrix 100x100 (content unimportant)

val matrix = Seq.tabulate(100, 100) { case (x, y) => x + y }

// A

for {

   row <- matrix

   elem <- row

} print(elem)

// B

val func = print _
for {

   row <- matrix

   elem <- row

} func(elem)
Run Code Online (Sandbox Code Playgroud)

问题是:哪种实施方式A或B更有效?

我们都知道,理解可以转化为

// A

matrix.foreach(row => row.foreach(elem => print(elem)))

// B

matrix.foreach(row => row.foreach(func))
Run Code Online (Sandbox Code Playgroud)

B可以写成 matrix.foreach(row => row.foreach(print _))

据说正确答案是B,因为A会创建print100倍以上的函数.

我检查了语言规范,但仍然无法理解答案.有人可以向我解释一下吗?

scala for-comprehension

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

从给定节点开始检索特定类型的所有边

我有图遍历的问题.使用典型的图遍历算法(DFS,BFS)无法解决我的用例.我想要从特定节点(N)开始的遍历节点,其中edge是ET类型.我想检索所有节点及其路径N到节点.这可以使用Orient的策略之一,但我希望拥有所有可能的路径 - 不仅仅是一条路径.

样品:

图形

对于上图,从RC有两条路径:

  • 根 - > A - > C.
  • 根 - > B - > C.

我的图表可能有点复杂,但想法是一样的.

在OrientDB文档中,我发现有一个方法Graph可以返回所有的边(getEdgesofClass(String class)).我认为我可以解决我的问题如果我可以以某种方式指定图形(主图的子图 - 只有与根节点连接的节点),我想在其上调用此方法.

感谢所有的投入.

graph-traversal orientdb

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

Scala 是否真的是一个 Monad

我想知道 ScalaEither是否真的是Monad范畴论意义上的?我知道 Monads 应该有bindreturn方法。是什么Eitherbind呢?

monads scala either

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

为什么从 Unix 套接字读取时使用 netcat 发送 ^D 不会触发 EOF?

我正在尝试编写一个从 Unix 套接字读取的服务器:

use std::io::prelude::*;
use std::os::unix::net::{UnixListener, UnixStream};

fn main() {
    let socket_name = "socket";

    let listener = match UnixListener::bind(&socket_name) {
        Err(err) => panic!("Failed to bind to socket: {}.", err),
        Ok(stream) => stream,
    };

    for mut stream in listener.incoming() {
        match stream {
            Ok(ref mut stream) => {
                let msg = read(stream);
                stream.write_all(msg.as_bytes()).expect("Echo");
            }
            Err(err) => panic!("Error occured when listening from the stream. {}", err),
        }
    }

    fn read(stream: &mut UnixStream) -> String {
        let mut s = String::new();
        stream.read_to_string(&mut …
Run Code Online (Sandbox Code Playgroud)

unix sockets rust

5
推荐指数
2
解决办法
8894
查看次数

Scala Option过滤方法存在疑问

我一直在阅读Scala文档,在浏览Option课程时,我看到了如下所示的filter实现:

final def filter(p: A => Boolean): Option[A] = 
  if (isEmpty || p(this.get)) this else None
Run Code Online (Sandbox Code Playgroud)

为什么我们要检查我们的Option实例是否为空?这不会导致这None两种方式吗?

scala filter option

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