小编Cor*_*ein的帖子

按项目索引过滤列表?

val data = List("foo", "bar", "bash")
val selection = List(0, 2)
val selectedData = data.filter(datum => selection.contains(datum.MYINDEX))
//                                                  INVALID CODE HERE ^
// selectedData: List("foo", "bash")
Run Code Online (Sandbox Code Playgroud)

假设我想过滤List给定的选定索引列表.如果在filter方法中,我可以引用列表项的索引,那么我可以如上所述解决这个问题,但datum.MYINDEX在上述情况下无效.

我怎么能这样做呢?

scala

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

仅包含一个元素的 Seq 表示形式?

我经常发现自己将Seq只有一个元素的 a 传递给这样的方法:

def myMethod(myList: Seq[Int]) = { ... }
Run Code Online (Sandbox Code Playgroud)

通常我这样做:

myMethod(List(42))
Run Code Online (Sandbox Code Playgroud)

但我突然想到,这可能不是最优雅的方式,如果说我喜欢 Scala 的一件事,那就是它能够在我认为不可能的情况下减少使用的字符,从而让我大吃一惊。

Seq那么,是否有比更短或更优雅的单个项目表示形式呢List(42)

我能想到几个更糟糕的选择!

42 to 42
42 :: List()
Run Code Online (Sandbox Code Playgroud)

scala

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

从helm命令行设置嵌套数据结构?

我正在安装prometheus-redis-exporter Helm图表。它的Deployment对象可以注入注解:

# deployment.yaml
...
  template:
    metadata:
      annotations:
{{ toYaml .Values.annotations | indent 8 }}
Run Code Online (Sandbox Code Playgroud)

通常,如果我提供值文件,则可以执行以下操作:

# values.yaml
annotations:
  foo: bar
  bash: baz
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令安装图表:

helm install --values values.yaml
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,对我来说,在命令行上指定这些值会更简单--set,我只是不确定如何指定这样的嵌套集。

annotations在命令行上安装头盔图表时,如何设置以上对象:

helm install --set <what_goes_here>
Run Code Online (Sandbox Code Playgroud)

kubernetes-helm

6
推荐指数
2
解决办法
897
查看次数

使用EitherT来评估使用共享错误类型继承的操作结果?

我有一个用于剥香蕉的错误类型层次结构:

sealed trait PeelBananaError
object PeelBananaError {
  case object TooRipe extends PeelBananaError
  case object NotRipeEnough extends PeelBananaError
}
Run Code Online (Sandbox Code Playgroud)

我有一些结果EitherT,我们知道只能以两种方式之一失败:

val peelBrownBananaResult: EitherT[Future, TooRipe, String] = ...
val peelGreenBananaResult: EitherT[Future, NotRipeEnough, String] = ...
Run Code Online (Sandbox Code Playgroud)

现在我需要String从右边收集结果并将它们组合起来以获得最终结果:

val combinedResult: EitherT[Future, PeelBananaError, String] = for {
  first <- peelBrownBananaResult
  second <- peelGreenBananaResult
} yield (first + second)
Run Code Online (Sandbox Code Playgroud)

但是尝试这个会给我一个编译错误:

cmd15.sc:2: inferred type arguments [PeelBananaError.NotRipeEnough.type,String] do not conform to method flatMap's type parameter bounds [AA >: PeelBananaError.TooRipe.type,D]
  first <- peelBrownBananaResult
           ^
cmd15.sc:2: …
Run Code Online (Sandbox Code Playgroud)

scala for-comprehension scala-cats

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

如何创建一个使用字符串格式的给定变量文本的宏(或其他工具)?

在尝试调查代码中的问题时,我是调试打印的粉丝:

cout << "foo:" << foo << "bar:" << bar << "baz:" << baz;
Run Code Online (Sandbox Code Playgroud)

由于我经常编写这样的代码,如果我可以使它更通用并且更容易输入,那将是非常棒的.也许是这样的:

DEBUG_MACRO(foo, bar, baz);
Run Code Online (Sandbox Code Playgroud)

虽然foo,barbaz解决变量名,而不是字符串,是有可能使用他们的变量名创建的字符串"foo:","bar:""baz:"?你能编写一个带有未指定数量参数的函数或宏吗?

c++ macros

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

如何在Qt Creator中指定在make完成时执行的自定义构建步骤?

我喜欢Qt Creator在编译完成时通知我,所以我去了Projects Pane> Build> Build Steps> Add Build Step.但是,我发现只有make成功退出时才会执行此自定义构建步骤.如果我有任何编译错误,那么我的自定义步骤不会执行,我不会收到通知.

即使遇到编译错误,如何添加自定义构建步骤?

qt-creator

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

清除当前行的简短命令?

有时我想清除一条线vim而不是删除它.

之前:

foo
bar
lineToClear
baz
Run Code Online (Sandbox Code Playgroud)

foo
bar

baz
Run Code Online (Sandbox Code Playgroud)

vim我知道的命令中,我能得到的最接近的是D(大写d),但通常这需要我先键入0到行的开头.

我知道,我很懒.

是否存在只清除整行的命令,而不仅仅是光标后的字符?

也许是某种遏制类型的直接大脑界面?

vim

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

"不命名类型"错误,但类指针已经有前向声明?

我收到此编译器错误

error: 'RawLog' does not name a type
Run Code Online (Sandbox Code Playgroud)

这是相关代码:

//DataAudit.h
#ifndef DATAAUDIT_H
#define DATAAUDIT_H

class RawLog;

class DataAudit
{
...
private:
    RawLog* _createNewRawLog(); // This is the line indicated with the error
};

#endif // DATAAUDIT_H
Run Code Online (Sandbox Code Playgroud)

通常,前向声明可以解决此类错误.答案表明包含循环标头可能会导致此问题.但是,使用#ifndef#define语句是否阻止了循环标题包含?

还有其他原因我可能会看到这个错误吗?

我可以用什么方法来进一步推断出这个错误的本质?

更新:这很奇怪.我有一个Globals.h文件,如果我定义了一个新enumGlobals.h,出现错误.然后,如果我注释掉enum,那么错误就会消失.这让我认为循环依赖已经存在了一段时间,并且添加了enum某种方式重新排序编译单元,从而暴露了之前没有的依赖?

c++ compiler-errors forward-declaration

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

如果选项包含特定值,则以惯用方式评估true

我想编写一个方法,true如果Option[Int]包含特定值则返回,否则返回false.这样做的惯用方法是什么?

var trueIf5(intOption: Option[Int]): Boolean {
  intOption match {
    case Some(i) => i == 5
    case None => false
  }
}
Run Code Online (Sandbox Code Playgroud)

上述解决方案显然有效,但Scala文档将此方法标记为不太惯用.

有没有一些方法,我可以用做同样的事情map,filter或者其他什么东西?

我得到了这个,但它只是将问题更改为"如果选项包含则返回true true",这实际上与"如果选项包含时返回true 5"相同.

var trueIf5(intOption: Option[Int]): Boolean {
  intOption.map(i => i == 5).???
}
Run Code Online (Sandbox Code Playgroud)

scala

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

为什么不用fork()分割的进程通过这个函数进行相同的操作?

我对C/C++中的fork()函数感到困惑.给出以下代码:

void fork2()
{
    printf("LO\n");
    fork()
    printf("L1\n");
    fork();
    printf("Bye!\n");
}
Run Code Online (Sandbox Code Playgroud)

讲座幻灯片给出了下图

         ______Bye
   ___L1|______Bye
  |      ______Bye
L0|___L1|______Bye
Run Code Online (Sandbox Code Playgroud)

对我来说,这个图没有任何意义.我希望每次调用fork都会导致调用printf("LO\n").还是我错了?

c c++

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