如何使用三元运算符执行此 IF 操作?
if (img != null) {
return img;
} else if (!user) {
return 'img.svg';
} else if (user) {
if (user.img && !camera) {
return `imgServer`;
} else if (!user.img && !camera) {
return 'img.svg';
} else if (user.img && camera) {
return camera;
} else if (!user.img && camera) {
return camera;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过多种方法,但没有一种对我有用。
javascript if-statement conditional-operator conditional-statements
我无法理解为什么编译器在分配不兼容的指针时不发出警告(?:),但在直接分配时发出警告。
在这种情况下编译器会发出警告:
\n\n\ntest.c:在函数 \xe2\x80\x98main\xe2\x80\x99 中:test.c:8:4:警告:分配给\n\xe2\x80\x98uint32_t *\xe2\x80\x99 {aka \xe2 \x80\x98unsigned int *\xe2\x80\x99} 来自不兼容的指针类型\n\xe2\x80\x98uint32_t **\xe2\x80\x99 {aka \xe2\x80\x98unsigned int **\xe2\x80\x99 } [-Win兼容指针类型]\n8 | a = 数组;\n| ^
\n
#include <stdint.h>\n#include <stdlib.h>\n\nint main(void)\n{\n uint32_t *array[10], *a;\n a = array;\n}\nRun Code Online (Sandbox Code Playgroud)\n以下情况不会发出警告:
\n#include <stdint.h>\n#include <stdlib.h>\n\nint main(void)\n{\n int b = 8;\n uint32_t *array[10], *a;\n\n a = (b >= 8) ? array : malloc(8);\n}\nRun Code Online (Sandbox Code Playgroud)\n环境:
\nGcc version 9.3.0\nUbuntu 20.04\ncompilation cmd: gcc test.c -o test.out\nRun Code Online (Sandbox Code Playgroud)\n c gcc conditional-operator void-pointers implicit-conversion
问题:
如果三元为真,我尝试返回图标和文本,如果三元为假,则仅返回文本。这是我的代码:
{quote.is_archived ? <PencilFill className="mr-10" size={ 10 }/> + 'View' : 'Edit'}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,这就是我得到的,有人能指出我为什么会发生这种情况吗?
我如何在三元运算符中调用两个函数?\n我尝试通过添加 && 但随后它只调用第一个函数并忽略第二个函数。
\ne.g.\nsetState(date) && dispatch(paypal_error({ time: date }))\nRun Code Online (Sandbox Code Playgroud)\n这是完整的代码
\nconst handleDateChange = (date) => {\n setDisablePing(true);\n const minutes = parseInt(dayjs(date).format('HH') * 60) +\n parseInt(dayjs(date).format('m'))\n\n if(minutes > pauseStartMin && minutes < pauseEndMin){\nsetState(\n new Date(0, 0, 0, pauseEndHour, pauseEndMinute + deliveryTime)\n ),\n dispatch(\n paypal_error({\n time: new Date(\n 0,\n 0,\n 0,\n pauseEndHour,\n pauseEndMinute + deliveryTime\n ),\n }),\n \n toast.error(\n `Zurzeit Pause. Bestellungen ab ${dayjs(\n newPauseEndHour.toString(),\n 'H'\n ).format('HH')}:${dayjs((newPauseEndMin + 1).toString(), 'm').format(\n 'mm'\n )} Uhr wieder m\xc3\xb6glich`,\n {\n position: toast.POSITION.BOTTOM_RIGHT,\n }\n …Run Code Online (Sandbox Code Playgroud) 根据这个问题,sizeof(true)或者sizeof(false)是4字节,因为true它false是宏并在#include <stdbool.h>头文件中定义.
但是,这里有趣的程序输出.
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool a = true;
printf("%zu\n", sizeof(a ? true : false, a));
/* ^^ -> expresion2 */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出(现场演示):
1
Run Code Online (Sandbox Code Playgroud)
C11 6.5.15条件运算符(P4):
第一个操作数被评估; 在其评估与第二或第三操作数的评估之间存在一个序列点(以评估者为准).仅当第一个操作数不等于0时才评估第二个操作数; 仅当第一个操作数比较等于0时才评估第三个操作数; 结果是第二个或第三个操作数的值(无论哪个被评估),转换为下面描述的类型.110)
这里a是一个bool类型和赋值true,然后在sizeof运算符内,运算conditional符执行expression2因为a是a true.
因此,comma运算符部分(表达式3)未根据标准进行评估,而表达式2是宏.所以,根据那个问题,宏的输出是4字节,但在这里,程序的输出是1字节.
那么,为什么 只sizeof(a ? …
我正在尝试将下面的代码转换为带有三元运算符的速记版本
if (sum % 10 === 0) {
return true;
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
它按原样工作正常,但是当我将其更改为
sum % 10 === 0 ? return true : return false;
Run Code Online (Sandbox Code Playgroud)
我收到语法错误,当我将其更改为
sum % 10 === 0 ? true : false;
Run Code Online (Sandbox Code Playgroud)
它没有按预期工作。
如果有人能启发我了解发生了什么,我将不胜感激。
编写这行代码时出现错误。我想检查该值是否等于并大于0然后获取该值,否则获取空白或空值。
double h = model.WorkHours.Value>=0 ? model.WorkHours.Value:"";
Run Code Online (Sandbox Code Playgroud) 我想要的是类似以下内容:
let x=32
let y=x===32 ?: 7;
Run Code Online (Sandbox Code Playgroud)
我现实生活中的例子更像是这样的:
inlineFunction(parameterWithLongNameIAmTesting===20000?parameterWithLongNameIAmTesting:anotherLongNameVariable);
Run Code Online (Sandbox Code Playgroud)
基本上使三元短路。我想y等于x当且仅当x=== 32。在上面的情况下,分配给的值y将是 32。但是,如果我分配x给等于 50 或其他任何值,则将y等于 7。
javascript 中有内置的方法可以做到这一点吗?
我有一个数字,例如 X。我想检查它是否可以被 Y(另一个数字)整除。如果能被Y整除,我需要返回1,否则返回0。但是我不允许使用if条件、三元运算符、等于等。有什么建议吗?
如果i是偶数,for(int j = 0; j < m; j++)
否则如果i是奇数,for(int j = m-1; j > 0; j--)
我想将这两个条件结合起来如下。
for( (i%2==0) ? (int j = 0; j < m; j++) : (int j = m-1; j > 0; j--))
Run Code Online (Sandbox Code Playgroud)
但似乎失败了。
?有没有办法使用C 语言或其他方式组合这两个条件?