有没有办法确定循环是否最后一次迭代.我的代码看起来像这样:
int[] array = {1, 2, 3...};
StringBuilder builder = new StringBuilder();
for(int i : array)
{
builder.append("" + i);
if(!lastiteration)
builder.append(",");
}
Run Code Online (Sandbox Code Playgroud)
现在问题是我不想在最后一次迭代中附加逗号.现在有一种方法可以确定它是最后一次迭代还是我坚持使用for循环或使用外部计数器来跟踪.
天真的,有条件执行的指令对我来说似乎是一个好主意.
当我阅读更多关于ARM(和类似ARM)的指令集(Thumb2,Unicore,AArch64)时,我发现它们都缺少条件执行的位.
为什么每个都缺少条件执行?
条件执行当时是错误的,还是后续的更改使得它成为指令位的昂贵浪费?
在PEP 553 breakpoint()实用程序之前的python版本中,推荐的方法是添加(理想情况下是单行)代码以具有可以在某种条件下忽略的断点(例如,全局调试标志或args.debug标志)的推荐方法。
在Perl中,我习惯于使用$DB::single=1;1;单行,我知道我可以放心地留在代码中,perl code.pl除非明确调用,否则不会影响的正常运行perl -d code.pl。例如:
my $a = 1;
$DB::single=1;1; # breakpoint line
my $b = 2;
print "$a $b\n";
Run Code Online (Sandbox Code Playgroud)
如果我将此代码运行为:perl code.pl,它将运行完成。如果我使用以下代码运行该代码:perl -d code.pl,pdb它将在断点行处停止(而不是在带有my $b = 2;语句的下一行之前),因为它在1;语句后包含一条$DB::single=1;语句;
同样,如果我写:
my $debug = 1;
my $a = 1;
$DB::single=$debug;1; # first breakpoint line
my $b = 2;
$DB::single=$debug;1; # second breakpoint line
print "$a $b\n";
# [...] Lots more code sprinkled …Run Code Online (Sandbox Code Playgroud) 有没有办法在pom.xml中执行片段的条件执行?我的要求是根据pom.xml中定义的变量复制文件/目录以部署结构...
例如:
< if >
< equals arg1="package" arg2="package"/>
< then>
....
< /then>
< /if>
Run Code Online (Sandbox Code Playgroud)
不知道我怎么能做到这一点!
任何指针都将受到高度赞赏.
谢谢,SR
有时我需要创建一个包装元素,该元素将根据自己的逻辑显示(或不显示)其子元素,并可选择将它们包装在自己选择的元素中:
<SomeWrapper some={condition}>
Hello
</SomeWrapper>
Run Code Online (Sandbox Code Playgroud)
这是可行的,因为孩子们(“Hello”)是静态的。但是,如果子级要动态计算并且只有在条件成立时才能明确定义,该怎么办?
<SomeWrapper some={condition}>
<ul>
{this.may.not.exist.unless.condition.map(item =>
<li key={item.id}>{item.text}</li>
)}
</ul>
</SomeWrapper>
Run Code Online (Sandbox Code Playgroud)
在这里,如果条件为 false 并且包装器元素不使用其子元素,它们仍将被创建并沿树向下传递,浪费资源并可能在此过程中引发错误。
一种解决方案(可能是最好的?)是将内容包装在它们自己的组件中:
<SomeWrapper some={condition}>
<InnerContent/>
</SomeWrapper>
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为(AFAIK,如果我错了请纠正我)InnerContent 的构造函数和渲染不会被调用,除非 SomeWrapper 实际上决定使用它的childrenprop。
但是如果我不想为 3 行代码创建组件怎么办?
我在野外看到过两种选择,但没有一个特别有吸引力:
作为唯一的孩子传递一个重击:
<SomeWrapper some={condition}>{() =>
<ul>
{this.may.not.exist.unless.condition.map(item =>
<li key={item.id}>{item.text}</li>
)}
</ul>
}</SomeWrapper>
Run Code Online (Sandbox Code Playgroud)传递一个 thunk 作为 prop:
<SomeWrapper some={condition} render={() =>
<ul>
{this.may.not.exist.unless.condition.map(item =>
<li key={item.id}>{item.text}</li>
)}
</ul>
}/>
Run Code Online (Sandbox Code Playgroud)我不喜欢它们,因为 lambda 给代码增加了视觉噪音,更不用说浪费资源,在每次render()执行时都重新创建(AFAIK。)
还有其他我没有看到的解决方案吗?我应该始终使用 InnerContent 元素吗?
我需要形成各种命令的管道。管道的某些元素或元素序列仅在某些条件成立时才相关。现在,我可以写:
if [[ $whatever ]]; then
cmd1 | cmd2 | cmd3 | cmd4
else
cmd1 | cmd4
fi
Run Code Online (Sandbox Code Playgroud)
但这意味着重复cmd1and cmd4,另外,可能有几个条件,我不想写嵌套的 if 。所以,我试着写这个:
if [[ $whatever ]]; then
pipeline_segment="| cmd2 | cmd3"
else
pipeline_segment=""
fi
cmd1 ${pipeline_segment} | cmd4
Run Code Online (Sandbox Code Playgroud)
但是 - 管道符号没有被解释为使用管道的指令。
我如何让 bash 也执行我想要的管道?
注意:您可以假设 bash 版本为 4 或更高,但前提是您必须这样做。