Coffeescript 中的条件运算符
Posted
技术标签:
【中文标题】Coffeescript 中的条件运算符【英文标题】:Conditional operator in Coffeescript 【发布时间】:2011-12-31 12:16:35 【问题描述】:我真的很喜欢这个:
var value = maxValue > minValue ? minValue : maxValue;
在 Coffescript 中有同样简洁的东西吗?
【问题讨论】:
非常感谢您没有将其称为“三元运算符”。 @MarkWilden 为什么不呢?这是一个既定术语 如果你在寻找 coffescript 的三元运算符,你马上就能找到。 @MarkWilden:你得到了 5 个赞,所以似乎有不少人同意你的观点,但请你解释一下为什么? “'三元运算符'的问题在于它描述了它看起来像什么,而不是它做了什么。”-- Eric Lippert , blogs.msdn.com/b/ericlippert/archive/2010/02/18/…(在 cmets 中) 【参考方案1】:value = maxValue > minValue && minValue || maxValue
这实际上是不正确的,检查 cmets。
【讨论】:
这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 @PlasmaHH:这实际上是一个有效的答案,只是可读性差了一点。 @RăzvanPanda 不,这不是一个有效的答案,因为它所做的事情与要求的略有不同,并且答案中没有描述/记录差异。例如。如果minValue
等于0
和maxValue
等于5
,则maxValue > minValue ? minValue : maxValue
将返回0
,而maxValue > minValue && minValue || maxValue
将返回5
。
@pepkin88:这是正确的,当为 minValue 传递一个虚假值并且条件为真时,此答案不起作用。【参考方案2】:
正如 Răzvan Panda 指出的那样,我的评论实际上可能是更好的答案之一:
value = `maxValue > minValue ? minValue : maxValue`
【讨论】:
你这行代码中引号的作用是什么? 反引号导致行在赋值之前执行。【参考方案3】:在javascript和coffeescript中都有一个more简洁的选项:)
value = Math.min(minValue, maxValue)
【讨论】:
喝咖啡,value = Math.min minValue, maxValue
;)
我认为问题不是指实际内容,而是指在一行中完成所有操作的能力。不过可能是错的。
错误,因为它没有解决问题。 OP 询问Conditional operator in Coffeescript
以及如何将其写入,并给出JS
示例。这只是一个示例,与实际的语法问题无关。【参考方案4】:
事实如下:
在文档中,有一节标题为“条件、三元和条件赋值”。这导致人们相信 coffeescript 支持
condition ? when-true : when-false
但实际上并没有。
以下是解决此问题的补丁信息
这是补丁(已推送到 coffeescript.org):
http://github.com/jashkenas/coffee-script/commit/ec2d358ae3c82e9888c60695d7cce05edde0c55a
示例:
mood = greatlyImproved if singing
if happy and knowsIt
clapsHands()
chaChaCha()
else
showIt()
date = if friday then sue else jill
options or= defaults
【讨论】:
if then else
是三元运算,只是语法不同而已。
咖啡脚本中,if else语句写在一行语句中。
我的意思是三元运算被定义为三个元素的运算。单行if then else
语句归类为三元。 javascript 中“三元”运算符的正确术语是 条件运算符。【参考方案5】:
在这种情况下,感觉 CoffeeScript 有相互竞争的理念:
-
简洁
不要多余
由于所有操作都会返回结果,因此 if/then/else 的处理方式可以满足您的需求。添加 ?/: 运算符是多余的。
这是我希望他们给我们 ?/: 三元运算符的地方,即使它是多余的......它只是比 if/then/else 变体更好读。
只是我的 2c。
【讨论】:
CoffeeScript 中不可能有a ? b : c
三元组没有歧义,因为a ? b
有一个含义(“a
如果它是非空的,b
否则)和@987654325 @ 也有一个 (b: c
)。【参考方案6】:
你可以这样写:
value = if maxValue > minValue then minValue else maxValue
它会像你的代码一样编译。
【讨论】:
【参考方案7】:value = if maxValue > minValue then minValue else maxValue
【讨论】:
你也可以这样做:value = `maxValue > minValue ? minValue : maxValue`
@PeterKrnjevic:您可能想将您的评论更改为答案 :) 在我看来,相同的字符数但可读性较差,这也有效:***.com/a/23915351/750216
如果认为正确的解决方案是:value = Math.min minValue, maxValue
好的,现在你如何在多行上写这个?除了使用续行符号 ``?以上是关于Coffeescript 中的条件运算符的主要内容,如果未能解决你的问题,请参考以下文章