是否有neither A nor B
语法?
答案 0 :(得分:85)
哦......你想要“不是”关键字吗?
VB添加的不是关键字
(Newswire 8-19-2004)
微软已宣布Visual Basic将添加“Is not”关键字 语言。根据消息来源 VB.NET团队“用VB,我们想要的 语言以你的思维方式运作。 广泛的可用性研究 告诉我们的好处 添加不是语言。“添加关键字是允许的 语法如
If ThisThing Ain't Nothing Then根据消息来源“我们只是 试图跟上进步 如你所知,英语 变化几乎和...一样快 技术本身。“VB团队 相信ain't is poised to finally be a fully supported keyword in the English language和他们 觉得如果他们不包括 在此版本中,关键字可能会下降 在他们下一个之前远远落后于英 有机会更新VB。然而,热情 争论是“不是”应该等同于什么 至。在它最流行的形式, 上面的代码行将转换为:
If ThisThing Is Nothing Then然而,每个人都是二年级英语 老师已明确表示“不是 没有“实际上意味着”是 东西“,因为它是双重否定的。 意味着正确的平等 是
If ThisThing IsNot Nothing Then微软并不急于急于求成 通过这一决定,国家消息来源, “看看,在VB.NET Beta 1和Beta之间 2,我们不得不change the definition of 'true'。我们不想去 通过那个。“然而,语言纯粹主义者宣称这一点 整个方法都是错误的, 注意到“不是”是一种收缩 因为“我不是”,并说“如果ThisThing Am Not Nothing“只是糟糕的语法。 他们说,更好的选择会 包括恢复我没有,如“如果 ThisThing我不是什么“。但是甚至 这可能不够远 语言学家Jacque Leblanc,“我坚持说 双重的永久性 消极是这个的根本原因 问题,但到目前为止,还没有人真的 愿意讨论显而易见的事 大象在房间里。真的 解决方案是允许'如果 这个项目就是那么。'“
据报道,微软也是如此 尝试“AsIf”,“也许”, 和“完全”。另外,“抓住” 可能会被“Doh!”取代, 并且“最后”将被替换为 “不管”。
来源:http://web.archive.org/web/20050308014055/http://ea.3leaf.com/2004/08/vb_adds_aint_ke.html
答案 1 :(得分:55)
虽然没有内置语法来执行此操作,但我建议您查看list of supported logical operators,然后仔细研究De Morgan's laws。在这两个字段中有足够的知识将允许您在 if-else if 语法中编写任何逻辑语句。
编辑:要完全回答您的问题(尽管已在其他答案中已经完成),您可以编写一个非 - 或者语句,如下所示:
if (!A && !B) { DoStuff(); }
答案 2 :(得分:13)
编码“如果既不是A也不是B”:
if (!A && !B) { ... } //if (not A) and (not B)
或:
if (!(A || B)) { ... } //if not (A or B)
答案 3 :(得分:10)
你走了:
class neither_t
{
bool lhv;
neither_t(bool lhv): lhv(lhv) {}
public:
bool nor(bool rhv) const
{
return !lhv && !rhv;
}
friend neither_t neither(bool lhv);
};
neither_t neither(bool lhv)
{
return neither_t(lhv);
}
#include <cstdio>
int main()
{
int x = 3;
if (neither(x == 1).nor(x == 2)) {
puts("OK");
}
}
答案 4 :(得分:2)
不,没有。
答案 5 :(得分:2)
你的意思是来自perl的unless
吗?
$a = 12;
unless($a >= 0) {
print "a is negative\n";
} elsif ($a == 0) {
print "a is equal to 0\n";
} else {
print "a is positive\n";
}
# it prints: a is positive
奇怪的是,没有else unless
,只有(相当于)else if
。
答案 6 :(得分:1)
没有。您可以使用if
与!
(非),&&
(和)和||
(或)
答案 7 :(得分:1)
if ( x == 1 )
{ // do this }
else if ( x == 2 )
{ // do this }
else { // do this if it's neither 2 nor 1 }
最后一个与:
相同if ( x != 1 && x != 2 ) { // do something }
答案 8 :(得分:0)
是。和&amp;&amp;和|| C中的运算符执行流控制,所有表达式都是语句,因此&amp;&amp;和和||形成流程控制语句。评估表达式的项直到其值已知,因此&amp;&amp;将执行一系列真实的表达式和||将执行一系列虚假表达。作为|| (OR)只要其参数为false(NOT)就会继续运行,它可以被称为nor-nor语句。
bool a = fun1(), b = fun2();
a || b || ( cerr << "neither A nor B is true" << endl );
!a && !b && ( cerr << "De Morgan says neither A nor B is true" << endl );
“但是,”你说,“这不是一个真正的流程控制语句。它只影响一个语句中的流控制。”公平的努力。 throw
运算符实际上也是类型为void
的表达式。所以我们可以扩展这个,呃,风格来覆盖几行的块。
try {
a || b || ( throw logic_error( "neither a nor b is true" ), false );
} catch( logic_error &exc ) {
cerr << exc.what() << endl;
cerr << "now with added madness!" << endl;
}
我希望那就是你想要的......
答案 9 :(得分:0)
Ruby确实有一些这样的语法糖: