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在上述情况下无效.
我怎么能这样做呢?
我经常发现自己将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) 我正在安装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) 我有一个用于剥香蕉的错误类型层次结构:
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) 在尝试调查代码中的问题时,我是调试打印的粉丝:
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,bar和baz解决变量名,而不是字符串,是有可能使用他们的变量名创建的字符串"foo:","bar:"和"baz:"?你能编写一个带有未指定数量参数的函数或宏吗?
我喜欢Qt Creator在编译完成时通知我,所以我去了Projects Pane> Build> Build Steps> Add Build Step.但是,我发现只有make成功退出时才会执行此自定义构建步骤.如果我有任何编译错误,那么我的自定义步骤不会执行,我不会收到通知.
即使遇到编译错误,如何添加自定义构建步骤?
有时我想清除一条线vim而不是删除它.
之前:
foo
bar
lineToClear
baz
Run Code Online (Sandbox Code Playgroud)
后
foo
bar
baz
Run Code Online (Sandbox Code Playgroud)
在vim我知道的命令中,我能得到的最接近的是D(大写d),但通常这需要我先键入0到行的开头.
我知道,我很懒.
是否存在只清除整行的命令,而不仅仅是光标后的字符?
也许是某种遏制类型的直接大脑界面?
我收到此编译器错误
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文件,如果我定义了一个新enum的Globals.h,出现错误.然后,如果我注释掉enum,那么错误就会消失.这让我认为循环依赖已经存在了一段时间,并且添加了enum某种方式重新排序编译单元,从而暴露了之前没有的依赖?
我想编写一个方法,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) 我对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").还是我错了?