小编Chr*_*ris的帖子

Kotlin arrow-kt,将任一集合映射到任一集合的函数式方法

我最近经常使用 kotlin arrow,并且遇到了一个让我陷入困境的特定用例。

假设我有一些对象的集合,我想使用转换函数将其转换为另一种数据类型。我们还假设这个转换函数有失败的能力——但它不会抛出异常,而是返回一个 Either,其中Either.Left()是失败,Either.Right()是映射对象。处理这个用例的最佳方法是什么?下面是一些示例代码:

val list: Collection<Object> // some collection
val eithers: List<Either<ConvertError, NewObject>> = list.map { convert(it) } // through some logic, convert each object in the collection 

val desired: Either<ConvertError, Collection<NewObject>> = eithers.map { ??? } 


fun convert(o: Object) : Either<ConvertError, NewObject> { ... }
Run Code Online (Sandbox Code Playgroud)

本质上,我想在数据集合上调用映射函数,如果任何映射响应失败,我希望包含Either.Left()错误。否则,我希望Either.Right()包含所有映射的对象。

有什么干净的方法来做到这一点的想法吗?理想情况下,我希望进行一系列函数调用,但能够通过函数调用向上渗透错误。

functional-programming kotlin arrow-kt

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

从C中的字符串中删除所有非字母字符 - 可能的编译器问题

我在C中编写一个函数,它将获取一个字符串并删除所有不是小写字母字符的字符.我到目前为止编写了这段代码:

void strclean(char* str) {
   while (*str) {
      if (!(*str >= 'a' && *str <= 'z')) {
         strcpy(str, str + 1);
         str--;
      }
      str++;
   }
}
Run Code Online (Sandbox Code Playgroud)

当我传递字符串"hello [] [] world"时,该函数似乎主要工作,除了输出是:

hellowoldd
Run Code Online (Sandbox Code Playgroud)

当我在输入if语句的每一行之后打印它时,这是我收到的输出:

hello][]woldd
hello[]woldd
hello]woldd
hellowoldd
Run Code Online (Sandbox Code Playgroud)

它似乎非常接近,但我不明白为什么它会产生这个输出!最奇怪的部分是我已经将代码提供给其他两个朋友,它在他们的计算机上工作正常.我们都运行相同版本的Linux(ubuntu 14.04.3),并且都使用gcc进行编译.

我不确定代码是否存在导致输出不一致的问题,或者是否是导致问题的编译器问题.也许它与我的机器上的strcpy相比,与他们相比?

c alphabet string.h

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

使用sed从wget读取网站的字节数

我试图只打印wget命令的一小部分输出.如果我输入

wget http://google.com --spider --server-response
Run Code Online (Sandbox Code Playgroud)

我收到一个很长的输出列表到我要搜索的终端.其中一条线是

Content-Length: 219
Run Code Online (Sandbox Code Playgroud)

我想要做的就是阅读并打印出219号到标准输出.我在另一个堆栈溢出线程上找到了答案(在wget之前获取文件的文件大小为wget?)

wget http://google.com --spider --server-response -O - 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}'
Run Code Online (Sandbox Code Playgroud)

我理解这个命令有两个主要的困难.我希望有人可以向我详细解释这两件事.

  1. sed通常需要输入文件吗?管道wget命令的输出不会使其成为文件.怎么没有这个呢?

  2. 我不明白 - 是什么意思.我查了一下linux手册页,它提到它是为了"脚本"?这个标志很重要,因为没有它,没有任何作用.这是什么意思?此外,命令的其余部分发生了什么,如何打印出数字?

很抱歉问一个以前回答的问题,但我没有找到任何有意义的解释,我想尝试使用替代解决方案!

linux bash sed wget

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

标签 统计

alphabet ×1

arrow-kt ×1

bash ×1

c ×1

functional-programming ×1

kotlin ×1

linux ×1

sed ×1

string.h ×1

wget ×1