在javascript中有几种方法可以做到这一点.
最重要,最具可读性和灵活性的可能是:
if (a){
//b
}
else {
//c
}
Run Code Online (Sandbox Code Playgroud)
其他只能用于分配且不太可读的东西是:
var foo = 'c';
if (a){
foo = 'b';
}
Run Code Online (Sandbox Code Playgroud)
不过,我的主要问题是关于我能想到的最后两种方法:
var foo = a ? b : c;
var foo = a && b || c;
Run Code Online (Sandbox Code Playgroud)
这两个表达式之间有什么区别吗?除了缺乏可读性之外.
*尽管您可以将foo指定为函数,然后在if语句之后执行它.
我正在为jQuery Overlay提供自定义关闭按钮.
单击此按钮时,我想验证Overlay中的表单,并且当且仅当表单有效时才关闭Overlay .
示例(不起作用......总是关闭,无论如何)
$('.trigger[rel]').overlay(
{
close: '.ovclosebutton',
onClose: function()
{
if( validateSomething() )
this.getOverlay().close();
else
displayErrorInOverlayButDontCloseIt();
}
});
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
我想用a做以下LEFT JOIN(请不要建议UNION ALL)
SELECT o.*, s.col1, s.col2 FROM order o
INNER JOIN user u ON o.user_id = u.id
IF o.date less than '2011-01-01'
JOIN subscribe s ON u.key = s.key
ELSE
JOIN subscribe s ON u.email = s.email
END IF;
Run Code Online (Sandbox Code Playgroud)
我使用以下但无法测试它.
SELECT o.*, COALESCE(s1.col1,s2.col1) AS
col1, COALESCE(s1.col2, s2.col2) AS col2
FROM order o INNER JOIN user u ON o.user_id = u.id
LEFT JOIN subscribe s1 ON
(u.key LIKE (CASE o.date >= '2011-01-01 00:00:00'
WHEN TRUE THEN …Run Code Online (Sandbox Code Playgroud) 我有一段这样的代码:
bool finished = false;
size_t offset = 0;
for (Iter i = items.begin();
i != items.end() || (finished = !finished);
finished ? i : ++i, ++offset)
{
do_some_work();
if (some_condition(other_collection[offset]))
{
i = items.insert(i, new_value());
do_more_work();
if (blah) { continue; }
}
do_more_work();
}
Run Code Online (Sandbox Code Playgroud)
目标是为所有迭代器执行主体,包括end().
我从Visual C++等编译器获得"条件表达式中的赋值"警告.
我不想关闭它们(它们很有帮助)而且我不想插入#pragmas(它们在编译器之间不可移植).
我只想写一些简短的东西来告诉典型的编译器,"是的,我打算在这里分配".
我发现的最简单的解决方案是创建一个函数(例如assign)并调用它,但我想知道是否有任何方法也可以避免为此定义一个新函数.
第11,12,15和16行正在获得错误:"int类型的无效操作数和const char [2]到二元运算符<<"(我删除了"`",因此它不会显示代码格式).
#include<iostream>
using namespace std;
int main(){
int md,dg,dd,mg,m,d;
cin >> md >> dg >> dd >> mg;
if (dd+dg==md+mg){
cout << (mg>dg) ? 0 : 1 << " ";
cout << (dg>mg) ? 0 : 1 << endl;
}
else{
cout << (mg+md>dd+dg) ? 0 : (dd+dg-mg-md) << " ";
cout << (dg+dd>md+mg) ? 0 : (md+mg-dg-dd) << endl;
}
system("pause");
}
Run Code Online (Sandbox Code Playgroud) 我已经开始编程,但我似乎无法回答问题。我想对一个变量数做一个 if 语句。
我可以在 if 语句中使用 range(0,15) 来查看数字是否在范围内吗?
如果是这样,如何?似乎无法找到有关此特定主题的任何信息。
我有一个复杂的问题,我将通过简化我的数据集来尝试简化.说我有5个变量:
df$Id <- c(1:12)
df$Date <- c(NA,NA,a,a,b,NA,NA,b,c,c,b,a)
df$va <- c(1.1, 1.4, 2.5, ...) #12 randoms values
df$vb <- c(5.9, 2.3, 4.7, ...) #12 other random values
df$vc <- c(3.0, 3.3, 3.7, ...) #12 more random values
Run Code Online (Sandbox Code Playgroud)
然后我想创建一个新变量,如果日期等于a,b或c,则从va,vb或vc获取值.我曾尝试过嵌套的if-else,但是没有用.我也尝试过:
df$new[df$date=='a' & !is.na(df$date)] <- df$va
df$new[df$date=='b' & !is.na(df$date)] <- df$vb
df$new[df$date=='c' & !is.na(df$date)] <- df$vc
Run Code Online (Sandbox Code Playgroud)
这正确地将NA保留在新变量中,其中Date = NA,但是提供的值不是来自va,vb或vc,而是一些其他值.如果日期为'a',如果日期为'b',如果日期为'c',则如何获得等于va的df $ new;如果日期为'c',则为vc?
下面是代码:
import turtle
import math
def drawTree(segments,size):
"""
:param segments: refers to number of extensions from the previous
:param size: refers to the length of the initial extension
"""
if (segments < 0.0 | size < 0.0):
print("Invalid Input")
elif (segments == 0 | size == 0):
pass
elif segments > 0:
i = 1
for i in range(6):
turtle.down()
turtle.forward(size)
turtle.back(size)
turtle.right(60)
i -= 1
if segments != 0:
size *= (1/3)
turtle.forward(size)
turtle.back(size)
segments -= 1
drawTree(segments, size) …Run Code Online (Sandbox Code Playgroud) 试图破译这段C代码:
int WaitForPacket(uint16 milliseconds, Dexcom_packet* pkt, uint8 channel) {
uint32 start = getMs();
uint8 * packet = 0;
uint32 i = 0;
uint32 seven_minutes = 420000;
int nRet = 0;
swap_channel(nChannels[channel], fOffset[channel]);
while (!milliseconds || (getMs() - start) < milliseconds) {
i++;
if(!(i % 60000)) {
strobe_radio(channel);
}
doServices();
if((getMs() - start) > seven_minutes) {
killWithWatchdog();
delayMs(2000);
}
blink_yellow_led();
if (packet = radioQueueRxCurrentPacket()) {
uint8 len = packet[0];
fOffset[channel] += FREQEST;
memcpy(pkt, packet, min8(len+2, sizeof(Dexcom_packet)));
if(radioCrcPassed()) {
if(pkt->src_addr == dex_tx_id …Run Code Online (Sandbox Code Playgroud) 考虑以下C#代码:
IntPtr native = GetNativeError(/* parameters here */);
return new ManagedError(native);
Run Code Online (Sandbox Code Playgroud)
然后客户端代码以下列方式检查错误:
ManagedError err = /* get it with the code above */;
if(err.IsOk()) {
/* Success */
}
Run Code Online (Sandbox Code Playgroud)
这里的内存分配可以以if语句为代价来保存:
IntPtr native = GetNativeError(/* parameters here */);
if(native == IntPtr.Zero) {
return null;
} else {
return new ManagedError(native);
}
Run Code Online (Sandbox Code Playgroud)
然后客户端代码将检查错误,如下所示:
ManagedError err = /* get it with the code above */;
if(err == null) {
/* Success */
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:哪种方法更快?第一个有额外的内存分配.第二个是附加if声明.
更新:我的意思是,在成功案例中.错误情况很少发生,可以慢.
conditional ×10
c++ ×2
python ×2
.net-core ×1
boolean ×1
c ×1
c# ×1
callback ×1
if-statement ×1
javascript ×1
join ×1
jquery ×1
logic ×1
mysql ×1
overlay ×1
performance ×1
r ×1
range ×1
subset ×1
ternary ×1
while-loop ×1