问题标签 [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.

0 投票
1 回答
2918 浏览

java - 如何从代码完成中隐藏所有 java.lang.Object 方法?

我想为现有的类库创建一些简单的包装类。为了使语法易于阅读并且易于猜测(通过代码完成),我想删除java.lang.Object的方法。

问题是java中的所有非原子事物都继承自Object,因此具有这些方法。我已经尝试通过枚举和接口创建包装语法,但没有成功;因为枚举接口也是java.lang.Objects

java.lang.Object 有九种我不想在我的接口的代码完成中看到的方法。这是我要删除的内容(红色)和我要保留的内容(绿色):

替代文本 http://ju.venile.de/upload/java-lang-object-methods.png

下面是一些示例代码,用于围绕现有类创建漂亮的包装器(Builder 模式):

新包装器代码的用法应如下所示:

将构建器的所有this语句转换为接口将降低方法的可见性,例如,如果构建器实现了多个接口。不幸的是,所有 java.lang.Object 方法都将保留。

如果这种方法隐藏在 Java 中是可能的(也许使用注释?),我可以创建一个很好的库,它与 IDE 无关(到处都有很好的代码完成)。如果没有,那么至少 Eclipse IDE(可能是插件?)可能有一个技巧,可以提供 java.lang.Object 方法隐藏。

0 投票
5 回答
1925 浏览

syntax - 如何在一行中混合绑定(<-)和赋值(let)?(在哈斯克尔)

这是关于 Haskell 中的语法糖。一个简单的 Haskell 程序:

我在第一行 ( ) 中使用绑定,在第二行 ( args <- getArgs) 中使用纯赋值let first = ...。是否有可能将它们合并成一个可读的单行?

我知道我可以重写绑定“去糖”:

但是有没有更好的方法,而不用 (>>=) 弄乱一行并返回?

0 投票
2 回答
11751 浏览

scala - Scala Map:神秘的语法糖?

我刚刚发现了 scala 的这种语法Map(在此处以可变形式使用)

现在我不确定这是否是语言中内置的语法,或者这里是否发生了更基本的事情,涉及到 map 扩展了PartialFunction. 谁能解释一下?

0 投票
9 回答
1453 浏览

c++ - 2D 矩阵和重载 operator() / 丑陋的语法

我在我的一个项目中使用 2D 矩阵。这类似于C++ FAQ Lite中的建议。

巧妙的是,您可以像这样使用它:

现在,我有一个由顶点组成的图,每个顶点都有一个指向 2D 矩阵的公共指针(只是为了示例的简单),如上所示。现在我确实有一个非常难看的语法来访问它。

由于我对运算符重载缺乏经验,我可能在这里遗漏了一些语法糖。有更好的解决方案吗?

0 投票
4 回答
446 浏览

javascript - 如何在我的 Javascript 库中添加语法糖?

现在图书馆可以翻译这个操作

删除 () 的最佳方法是什么,以便开发人员可以编写如下语句:

天真的方法:

但是通过这种方法,我无法访问“this”。

我想为

类似于:)(需要的建议)

就像我们在方案中一样 list -> '

我试图克隆参数但失败了。

谢谢。

0 投票
10 回答
1941 浏览

c# - C# - 输出参数的语法糖?

让我们说一下,C# 在最纯粹的意义上允许多个返回值,我们希望看到类似的东西:

压缩为:

在这种情况下,在我实际调用方法之前,我不必了解方法的返回值。也许我依靠 Intellisense 来告诉我我正在处理什么返回值,或者我正在寻找一种方法来从我不熟悉的类中返回我想要的东西。

同样,我们目前在 C# 中有这样的东西:

其中 GetParticipants 的参数是一个输出字符串参数。然而,这与上面的有点不同,因为这意味着我必须抢占,或者至少回去写,创建一个变量来保存 out 参数的结果的代码。这有点违反直觉。

我的问题是,当前 C# 中是否有任何语法糖允许开发人员在与方法调用相同的行中进行此声明?我认为这会使开发(微小)更加流畅,并且如果我正在执行以下操作,也会使代码更具可读性:

以表明接收者正在当场宣布和分配。

0 投票
7 回答
291 浏览

javascript - 让一个返回另一个函数的逆函数的函数值得付出努力吗?

我最近在我们的内部 javascript 库中添加了一个 HasValue 函数:

A 在与同事的交谈中,我们提出了添加另一个基本上只是相反的函数的想法:也许 HasNoValue 或 IsNothing 如果我们最终这样做,我们将拥有:

但是,我们不确定两者兼有或 HasValue 是否更具可读性。哪个更易读/更受欢迎?

A:

乙:

0 投票
40 回答
11502 浏览

c# - 您见过的扩展方法的最佳或最有趣的用途是什么?

我开始真正喜欢扩展方法......我想知道她是否偶然发现了一个真正让他们大吃一惊的方法,或者只是发现很聪明。

我今天写的一个例子:

由于其他用户的评论而编辑:

这允许将 for 循环编写为 foreach 循环:

我迫不及待地想看看其他例子!享受!

0 投票
3 回答
31384 浏览

scala - Scala 的 apply() 方法是如何工作的?

在 Scala 中,如果我定义了apply在类或顶级对象中调用的方法,则只要我将一对括号附加到该类的实例并将适当的参数apply()放在它们之间,就会调用该方法。例如:

所以基本上,object(args)只是object.apply(args).

Scala 如何进行这种转换?

这里是否有全局定义的隐式转换,类似于 Predef 对象中的隐式类型转换(但种类不同)?还是有更深层次的魔法?我之所以这么问,是因为 Scala 似乎强烈倾向于一致地应用一组较小的规则,而不是包含许多例外的许多规则。这最初对我来说似乎是一个例外。

0 投票
1 回答
162 浏览

c# - 相当于 += 分配给事件的代码

我想知道是否有人可以告诉我与 += 运算符等效的原始代码,用于向事件添加方法。我很好奇它从技术角度是如何工作的。