标签: conditional-operator

Twig 速记条件设置变量

从这个问题我们知道了如何使用三元运算符来输出条件文本:Is there a Twigshorthandsyntax foroutputingconditionaltext

例子:

{{ foo ? 'yes' : 'no' }}
Run Code Online (Sandbox Code Playgroud)

我们如何使用三元运算符有条件地设置变量,而不直接输出它?

php conditional-operator twig

1
推荐指数
1
解决办法
4020
查看次数

PureScript 有三元条件运算符吗?

PureScript 有条件三元运算符吗?

如果没有,是否可以使用其他语言结构来模拟?

javascript conditional-operator purescript

1
推荐指数
1
解决办法
246
查看次数

可以在 C# 本地函数中使用三元运算符吗?

这是我想要实现的:

public static void foo()
{
    // Local function
    int? parseAppliedAmountTernary( decimal? d ) { 
        d.HasValue ? return Convert.ToInt32( Math.Round(d.Value, 0) ) : return null;
    }
    
    // The rest of foo...
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到编译错误。这种语法可能吗?我使用的是 Visual Studio 2019、.NET Framework 4,(当前)相当于 C# 7.3。

注意 - 我只是想弄清楚语法......任何关于代码“可读性”或其他美学的哲学讨论虽然有趣,但都不是重点。:)

代码示例(使用 Roslyn 4.0) https://dotnetfiddle.net/TlDY9c

c# conditional-operator local-functions

1
推荐指数
1
解决办法
418
查看次数

这是 ?三元运算合法吗?

我不是专家,但我确实喜欢学习和理解。考虑到这一点,我在 Arduino IDE 中编写了以下内容:

lockout[idx] ? bulb[idx].off() : bulb[idx].on();
Run Code Online (Sandbox Code Playgroud)

替换这个:

if (lockout[idx]) bulb[idx].off(); else bulb[idx].on();
Run Code Online (Sandbox Code Playgroud)

lockout[]是 的数组bool,并且bulb[]是类的数组,其中 。off.on方法。

我四处寻找示例,但从未见过?三元运算符的这种用法。我读过的内容似乎表明这不应该起作用。

但它确实可以编译。那么这实际上是合法的 C++ 吗?

c++ arduino conditional-operator

1
推荐指数
1
解决办法
223
查看次数

我可以在没有实用程序的情况下进行分配和返回吗?

有没有一种方法可以在不创建实用程序的情况下“分配和返回”?这是我的代码:

static int& do_work_(const int* p, int& result)
{
   result = (*p) * 10;
   return result;
}

template<typename T>
T& assign(const T* p, T& result)
{
   result = *p;
   return result;
}

int& do_work(const int* p, bool cond, int& result)
{
   return cond ? do_work_(p, result) : assign(p, result);
}
Run Code Online (Sandbox Code Playgroud)

我可以do_work()在没有该assign()实用程序的情况下实施吗?


签名的原因do_work()是它很方便:

const int value=1;
int i, j;
if (do_work(&value, true, i) == do_work(&value, false, j)) {}
Run Code Online (Sandbox Code Playgroud)

c++ return reference conditional-operator assignment-operator

1
推荐指数
1
解决办法
59
查看次数

通过三元运算符决定调用哪个成员函数

foo如果我想在一个对象上调用函数thisThing(用 C# 术语来说,这称为“接收器”,所以我在这里也这样称呼它)并传递参数myStuff,我会这样做:
thisThing.foo(myStuff);
超级简单,没什么奇怪的正在这里进行。

如果我想将参数更改为yourStuffbool 值是否b为 false,我会这样做:
thisThing.foo(b ? myStuff : yourStuff);
同样非常简单,三元运算符的基本使用。

如果我想将接收器更改为otherThingif bis false,我会这样做:
(b ? thisThing : otherThing).foo(myStuff);
有点奇怪,你可能不会经常这样做,但这也没什么疯狂的。

但是如果我想将被调用的函数更改为barif bis false,我该怎么做呢?
我会这样想:
thisThing.(b ? foo : bar)(myStuff);
但是,当然,这是行不通的。

有没有一种简单、美观、高性能的方法来做到这一点,最好不要多余地指定任何东西?
可能需要做出一些妥协,但重点是不必重复接收者和参数。所以以下工作:

if (b)
{
    thisThing.foo(myStuff);
}
else
{
    thisThing.bar(myStuff);
}
Run Code Online (Sandbox Code Playgroud)

但你必须重复接收者和参数。想象一下,thisThingmyStuff是更复杂表达式的占位符。您可能希望首先将它们放入局部变量中,但这会对复制产生影响,并且如果您有很多参数,它就不会很好地发挥作用。

您也许可以将函数指针指向这些成员函数,然后执行类似的操作(b ? pointerToFoo : pointerToBar)(myStuff);,但是处理函数指针往往很混乱(想想函数重载),而且编译器似乎不会正确优化掉它。但我很高兴在这里被证明是错误的。

c++ conditional-operator c++17

1
推荐指数
1
解决办法
409
查看次数

为什么 Lua 的三元运算符阻止我的函数返回多个值?

正如摘要所述。假设我想以三元运算符的方式解析ReturnFunction 。好吧,据我所知,只要我的函数返回几个值(ReturnThreeValues)被放置在ReturnFunction返回后的最后一个位置,如果三元运算符执行我认为的操作,则ReturnFunction应该返回它给出的三个值这里是预期的,但由于某种原因,即使 n == nil ,它也会不断返回ReturnOneValue的值(因为我在调用时没有包含它)。可以在这里看到并尝试:

<script src="//github.com/fengari-lua/fengari-web/releases/download/v0.1.4/fengari-web.js"></script>
<script type="application/lua">

    function ReturnOneValue(t, n)
        n = n or 1
        return t[n]
    end

    function ReturnThreeValues(t)
        return t[1], t[2], t[3]
    end

    function ReturnFunction(t, n)
        return n ~= nil and ReturnOneValue(t, n) or ReturnThreeValues(t)
    end

    local t = {"One", "Two", "Three"}
    local r1, r2, r3 = ReturnFunction(t)

    print(r1, r2, r3)

</script>
Run Code Online (Sandbox Code Playgroud)

好吧,基本上我不明白为什么我的打印结果是:“一零零”而不是:“一二三”,因为它应该是,如果三元运算符按(我认为是)预期的方式工作......或者在以这种三元方式解决多重返回函数时,我是否没有考虑到什么?

编辑:

FTR(以防万一对任何人都有用),在做了更多研究后,我找到了另一个问题以及可能的解决方法,结果证明它有效,如下所示:

<script src="//github.com/fengari-lua/fengari-web/releases/download/v0.1.4/fengari-web.js"></script>
<script type="application/lua">

    function ReturnOneValue(t, …
Run Code Online (Sandbox Code Playgroud)

lua variable-assignment conditional-operator lua-5.2

1
推荐指数
2
解决办法
164
查看次数

C# .NET null 如何在匿名类型中进行强制转换?

此代码将无法编译:

        var x = new {
            Property = null,
        };

Run Code Online (Sandbox Code Playgroud)

但以下例外:无法将 null 分配给匿名类型属性

但这会工作得很好:

        var someBool = false;
        var x = new {
            Property = someBool ? "value" : null,
        };
Run Code Online (Sandbox Code Playgroud)

我认为存在像这样的隐式转换 - (string)null 但不完全确定。

所以我想更多地了解这个案例以及它的内部工作原理(我没有找到任何文章解释这一点)

.net c# casting anonymous-types conditional-operator

1
推荐指数
1
解决办法
118
查看次数

Typescript 三元运算符破坏身份类型

为什么我的SupposedId下面的类型不是类型标识?

Typescript 正在抱怨Type 'T' is not assignable to type 'SupposedId<T>'.

为什么T不能分配给 或TT我错过了什么?

type SupposedId<T> = T extends object ? T : T;

function makeId<T>(test: T): SupposedId<T> {
  return test // <- Type 'T' is not assignable to type 'SupposedId<T>'
}
Run Code Online (Sandbox Code Playgroud)

游乐场示例

conditional-operator typescript

1
推荐指数
1
解决办法
453
查看次数

为什么三元运算符使字符变量打印整数而不是字符?

char g = 'G';
int i = 0;
System.out.print(1 == 1 ? g : 0);
System.out.print(" ");
System.out.print(1 == 0 ? i : g);
Run Code Online (Sandbox Code Playgroud)

理论上,这应该打印出“GG”,因为它两次打印字符变量的值。然而,第二次它打印出字符“G”的 ASCII 值。

上面的代码将打印出“G 71”,这不是预期的结果。

char g = 'G';
int i = 0;
System.out.print(1 == 1 ? g : 0);
System.out.print(" ");
System.out.print(1 == 0 ? 0 : g);
Run Code Online (Sandbox Code Playgroud)

然而,第二位代码将打印出“G G”,这是预期的。

java integer character conditional-operator

1
推荐指数
1
解决办法
89
查看次数