问题标签 [conditional-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
522 浏览

functional-programming - 在函数式语言中,如何有条件地选择要在 zip 或 zipWith 样式函数中使用的元素?

我熟悉zipWith对两个序列的相应元素进行操作的标准函数,但是在功能语言(或具有某些功能特征的语言)中,有条件地选择要压缩的元素对的最简洁方法是什么?第三序列?

当在 Excel 中划出一些东西时,这种好奇心就产生了。
对于 A1:A10、B1:B10、C1:C10、D1、E1 和 F1 中的数字,我使用如下公式:

IF 语句中的每一半乘法将产生一个布尔值数组,然后将它们相乘(AND'ed)在一起。这些布尔值控制最终将平均十个商中的哪一个,因此就好像正在评估十个单独的 IF 语句。

例如,如果 A1:A10 中的 10 个值中只有第二个和第三个值满足条件(>=D1 和 <=E1),那么公式最终会这样计算:

AVERAGE 函数恰好忽略了布尔值和文本值,所以我们只得到第二个和第三个商的平均值。

这可以用 Haskell 简洁地完成吗?二郎?LINQ 还是 F#?Python?ETC..

请注意,对于这个特定示例,上面给出的公式并不完全正确 - 它被缩写以了解基本点。当 A1:A10 中的十个元素都不满足条件时,则将十个 FALSE 值传递给 AVERAGE,这将错误地计算为 0。
公式应该这样写:

其中NA()产生错误,表明平均值未定义。

更新:

感谢您的回答。我意识到我的第一个问题非常简单,当第一个列表中的相应元素满足某些特定标准时,就对第二个和第三个列表中的元素对应用函数而言。我接受了 Norman Ramsey 的回答。

然而,我接下来要去的地方是想知道该函数是否可以应用于表示来自任意数量列表的相应元素的元组——因此我向 Lebertram 提出了关于zipWithN.

Apocalisp 关于应用函子的信息使我了解了有关 python 对参数列表进行解包的信息——将函数应用于任意数量的参数。

对于我上面给出的具体示例,平均列表元素的商(列表列表在哪里nums),看起来python可以这样做:

更一般地,使用一个函数f和一个谓词p(连同avg),这变成:

0 投票
15 回答
11558 浏览

c# - 易读与否:C# 多个三元运算符 + 如果不匹配则抛出

您觉得以下 C# 代码清晰易读吗?

其中 Throw 定义为:

我知道这不是惯用的 C#。但是,您第一眼或第二眼就能理解它吗?还是我走得太远了?

0 投票
11 回答
17448 浏览

java - 为什么 Java 没有条件与和条件或运算符的复合赋值版本?(&&=, ||=)

所以对于布尔值的二元运算符,Java 有&, |, ^,&&||.

让我们在这里简要总结一下他们所做的事情:

对于&,结果值是true如果两个操作数值都是true; 否则,结果为false

对于|,结果值是false如果两个操作数值都是false; 否则,结果为true

对于^,结果值是true如果操作数值不同;否则,结果为false

&&运算符类似于但仅当&其左侧操作数的值为 时才计算其右侧操作数true

||运算符类似于,但仅当其|左侧操作数的值为 时才计算其右侧操作数false

现在,在所有 5 个中,其中 3 个具有复合赋值版本,|=&=^=。所以我的问题很明显:为什么 Java 不提供&&=||=?我发现我需要的比我需要的多&=,而且|=

而且我不认为“因为它太长”是一个好的答案,因为 Java 有>>>=. 这种遗漏一定有更好的理由。


15.26 赋值运算符

有12个赋值运算符;[...]= *= /= %= += -= <<= >>= >>>= &= ^= |=


有人评论说,如果&&=||=被实施,那么它将是唯一不首先评估右手边的运算符。我认为复合赋值运算符首先评估右手边的想法是错误的。

15.26.2 复合赋值运算符

形式的复合赋值表达式E1 op= E2等价于E1 = (T)((E1) op (E2)),其中T是 的类型E1,除了E1只计算一次。

作为证明,以下代码段抛出 a NullPointerException,而不是ArrayIndexOutOfBoundsException.

0 投票
2 回答
228 浏览

c# - 为什么条件运算符在 C# 中总是返回一个 int?

可能重复:
条件运算符不能隐式转换?

使用条件运算符编写语句时,如果任一表达式是数值,则它们始终被解释为int类型。这使得使用此运算符分配short变量时必须进行强制转换。

难道编译器不应该short像在典型的赋值语句(short shortVal = 1;)中那样知道这两个值都是有效值吗?

0 投票
7 回答
1499 浏览

c# - 使用 C# 条件运算符的编译器错误

我似乎无法在谷歌上找到我需要的东西,我敢打赌我会在这里得到快速的答案。

那 ?: 语法对我来说是正确的。我收到编译器错误。

Program.cs(13,28):
错误 CS1002: ; 预期的
Program.cs(13,28):
错误 CS1525: 无效的表达式术语 ':'
Program.cs(13,30):
错误 CS1002: ; 预期的

不确定 csharp 语法,但它建立在 cpp 中。请帮忙!谢谢!

更新:你们中大约有 10 人给出了正确的答案,哈哈,所以我将奖励给第一个提交它的人。

有趣的语法,我认为我实际上比 c++ 语法更喜欢它。

我这样做的实际代码是:

0 投票
6 回答
2593 浏览

java - 如何强制 Java 接受方法调用的参数之一的条件类型?

这个问题很难说,所以我将不得不使用一些代码示例。基本上,我有一个(重载)方法,它需要 3 个参数,我重载了最后一个参数。如,有时最后一个参数是 a String,有时是 adouble等。我想使用三元条件表达式作为最后一个参数来调用此方法,以便根据某个值,它将传递一个双精度或字符串。这是一个例子......

重载的方法头:

我正在尝试做的事情:

但是,这会导致编译错误:

似乎 Java 还不够“聪明”(或者只是没有故意内置的功能)来实现任何一个选项都有支持它的方法。我的问题是 - 有没有办法做到这一点?我知道我可以通过将双精度作为字符串(例如writeToCell(2, 4, myValue != null ? someDouble.toString() : someString);)传递来模拟它,但是该方法需要将其作为双精度数据类型接收。

逻辑告诉我,没有办法强制 Java 接受这个声明......但值得一试,因为它会为我带来更清晰的代码。任何人都知道这样做的方法...?

0 投票
6 回答
4211 浏览

c# - 为什么条件运算符不能正确地允许使用“null”来分配给可空类型?

可能的重复项:
可空类型和三元运算符。为什么这行不通?
具有 nullable<value> 类型的条件运算符赋值?

这将无法编译,说明“无法确定条件表达式的类型,因为 'System.DateTime' 和 '' 之间没有隐式转换”

这工作得很好

0 投票
7 回答
1096 浏览

c++ - 一个关于条件运算符的面试题

我最近遇到了这个问题:How to reduce this expression: s>73?61:60; .

给出的提示是,我们可以使用一个可以正常工作的简单比较,而不是使用条件运算符

我不确定,但我认为通过一些 GCC 扩展是可能的,尽管我自己无法弄清楚。

编辑:整个表达式是这样的:s-=s>73?61:60

0 投票
9 回答
3252 浏览

c# - C# 条件运算符不是语句?

我有一个简单的小代码片段让我感到沮丧:

在编译时,它会生成错误:

只有赋值、调用、递增、递减和新对象表达式可以用作语句

HashSet.Add被记录为返回一个布尔值,因此三元 (?) 运算符应该可以工作,这看起来是一种完全合法的方法来跟踪我添加到哈希集中的唯一和重复项目的数量。

当我将其重新格式化为 if-then-else 时,它​​工作正常。

谁能解释这个错误,如果有办法作为一个简单的三元运算符来做到这一点?

0 投票
13 回答
366981 浏览

objective-c - 问号和冒号(?:三元运算符)在objective-c中是什么意思?

这行代码是什么意思?

?混淆:我。