问题标签 [syntactic-sugar]
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.
scheme - 在 Scheme 中,if 可以表示为布尔运算符的组合吗?
很容易表达and
,or
和(not
在if
本地绑定的帮助下or
)。我想知道反过来是不是真的。我天真的第一次尝试:
但是,如果test
是 非#f
并且conseq
是#f
,则翻译结果为altern
,这是不正确的。
是否有一个翻译可以评估为正确的值,同时保持 的短路性质if
?
c# - 如何检查一系列值是否正确排序?
我有许多Action
具有属性的对象long Timestamp
。我想做这样的事情:
不幸的是,这种语法是非法的。是否有内置方式或扩展\LINQ\whatever 方式来执行此操作?
请注意,它是单元测试类的目标,所以要发疯。我不关心性能,可读性等。
scala - 关于 Scala 的 assignments 和 setter 方法
编辑:提示此问题的错误现已修复。
在 Scala Reference 中,我可以阅读(第 86 页):
对简单变量 x = e 赋值的解释取决于 x 的定义。如果 x 表示可变变量,则赋值将 x 的当前值更改为计算表达式 e 的结果。e 的类型应该符合 x 的类型。如果 x 是在某个模板中定义的无参数函数,并且同一模板包含一个 setter 函数 x_= 作为成员,则赋值 x = e 被解释为该 setter 函数的调用 x_=(e)。类似地,对无参数函数 x 的赋值 f.x = e 被解释为调用 f.x_=(e)。
因此,例如,这样的事情可以正常工作:
然后我可以写
但是如果我这样定义类,在方法a中添加一个类型参数:
然后它不再起作用了;error: reassignment to val
如果我写的话,我会得到一个a.a = 10
。有趣的是,例如,它仍然可以在没有类型参数和隐式参数列表的情况下工作。
可以说,在这个例子中,类型参数不是很有用,但是在 DSL 的设计中,即使 getter 有类型参数,也可以调用 setter 方法(顺便在 setter 上添加类型参数)被允许并且工作正常)。
所以我有三个问题:
- 有解决方法吗?
- 当前的行为是否应该被视为错误?
- 为什么编译器强制使用 getter 方法以允许使用 setter 的语法糖?
更新
这就是我真正想做的事情。它相当长,抱歉,我本打算避免使用它,但我意识到省略它会更令人困惑。
我正在使用 Scala 中的 SWT 设计 GUI,并且使用 Dave Orme 的XScalaWT获得了极大的乐趣,这极大地减少了所需代码的数量。这是他的博客文章中的一个示例,内容是关于如何创建Composite
将°C 转换为°F 度的 SWT:
每个小部件构造方法的参数都是 type ,带有一些有用的隐式转换,例如允许直接为具有方法(WidgetType => Any)*
的小部件指定字符串。setText()
所有构造函数都是从单例对象导入的。
最后,我希望能够按照这些思路写一些东西:
这将通过 WritableValue 变量将文本字段的可编辑属性绑定到复选框的选择。
首先:命名参数在这里不适用,所以该行editable = false
必须来自某个地方。因此,沿着单例对象中的小部件构造方法,我可以在概念上编写,
...但这仅在吸气剂也存在时才有效。太好了:无论如何我都需要 getter 来实现与 <=> 的数据绑定。像这样的东西:
如果这行得通,生活会很好,因为我可以在 BindingMaker 中定义 <=> 并且我可以使用这个很好的语法。但可惜的是,getter 上的类型参数破坏了 setter。因此我最初的问题是:为什么这个简单的类型参数会影响编译器是否决定继续使用语法糖来调用 setter?
我希望这使它现在更清楚一点。感谢阅读……</p>
python - Python:使用 locals() 打印字典值
Python 中最好的工具之一是locals()
字符串格式化:
但是,这不能用字典值来完成:
知道如何进行这项工作吗?
c# - Lambda 表达式语法糖?
我刚刚遇到以下代码(.NET 3.5),它看起来不应该编译给我,但它确实,并且工作正常:
Table.IsChildOf 实际上是一个具有以下签名的方法:
我认为这相当于:
如果是这样,正确的术语是什么?
javascript - 使用 void 作为语法糖来防范隐式全局变量,是或否?
我一直在考虑 javascript 编程风格,我想知道添加一些语法糖来防止使用隐式全局容易犯的错误是否有意义,即:
在这个例子中, counter 突然变成了一个全局变量,而不是一个局部作用域为OuterFunction
.
通过“声明”一个闭包捕获的变量void
,您可以获得一个自由断言,就像任何其他使用counter
但未分配给它的代码一样。
编辑:正如jleedev指出的那样,仅使用变量名本身似乎可以测试它是否存在,即
也可以。
我看到的优点是:
- 写的很短。
- 在某种程度上,它看起来像一个变量声明。
- 编辑添加:如果始终如一地完成,语法检查器(肉类或程序)很容易发现此类错误。
另一方面:
- 这很令人困惑。代码实际上并没有做任何事情。
- 未来的解释器可能会发现它是毫无意义的、无副作用的代码,然后将其优化掉。
有什么我忽略的方面吗?这是一个愚蠢的想法,还是至少有点站得住脚?
提问者的编辑:这应该是一个社区 wiki 问题,但我没有看到将其更改为该复选框的复选框。我隐约记得有一个。
编辑为大愚蠢:当然,+=
尝试在递增之前检索表达式的值。因此将示例重命名为resetCounter
而不是incrementCounter
,这样它就有点意义了。
php - 多行 if 语句的任何替代方法?
是否有任何替代模式可以将多行 if 语句减少为更易读或更美观的东西?就像是:
layout - Haskell 记录语法
由于其丑陋的语法和命名空间污染,Haskell 的记录语法被许多人认为是对其他优雅语言的一个缺点。另一方面,它通常比基于位置的替代方案更有用。
而不是这样的声明:
在我看来,这些方面的东西会更有吸引力:
我确信我错过了一定有一个很好的理由,但是为什么类 C 的记录语法被采用了一种更简洁的基于布局的方法呢?
其次,管道中是否有任何东西可以解决命名空间问题,所以我们可以编写id foo
而不是fooID foo
在未来的 Haskell 版本中?(除了当前可用的基于类型类的冗长解决方法。)
haskell - 是否可以在 Haskell 中滚动您自己的语法糖(如 do-notation 或 arrow-notation)?
好吧,这个问题是不言自明的。假设我想实现一些特殊的语法只是为了好玩。是否可以?我应该使用什么工具?
c# - 如何在 C# 中显示该方法返回成功或失败而不返回值?
我知道在 C/C++ 等其他语言中,您会返回一个类似 SUCCESS 的值,这将指示调用方法该方法返回成功还是失败。
在 C# 中是否有一种“好”的方法可以在不需要 SUCCESS 返回变量的情况下执行此操作?想到抛出异常,但我不确定如何实现这一点。您是否可以使用自己的错误消息抛出自定义异常?
示例代码将不胜感激。
先感谢您。