“鸣蛇”再添新功能:空值合并

2021-09-09 17:06:10 +08:00
 abersheeran

https://github.com/abersheeran/mingshe

写过 JavaScript 的人应该很熟悉的 ?? 运算符。a ?? b 等价于 a if a is not None else b

预计还会增加 JavaScript 里的 ?. 操作符,但还在考量之中。欢迎大家使用、提意见。

2300 次点击
所在节点    Python
14 条回复
Bazingal
2021-09-09 17:12:46 +08:00
建议直接抄 C#,反正 JavaScript 很多也是借鉴 C#的,比如上面提到的两个
abersheeran
2021-09-09 17:25:23 +08:00
@Bazingal C# 没怎么看过,就拿来做过一次大学的作业😂我正经用过的语言只有 JavaScript 、Python 、C 、Rust 、Go……有空我去看看它的设计
yazinnnn
2021-09-09 17:30:28 +08:00
https://clojure.org/guides/threading_macros

建议把 pipe 改成 Clojure 的串行宏
abersheeran
2021-09-09 17:31:32 +08:00
@Bazingal 好家伙,C# 的 ?? 是右结合的,我设计的是左结合的。我赶紧去注明一下。
abersheeran
2021-09-09 17:33:15 +08:00
@yazinnnn 😓你这个,请去 https://github.com/hylang/hy 提。
Ediacaran
2021-09-09 17:36:44 +08:00
c=a or b
Rwing
2021-09-09 17:51:46 +08:00
C# 的 ??= 和 ?. 直接抄就好
2i2Re2PLMaDnghL
2021-09-09 18:08:40 +08:00
@abersheeran 这个左结合和右结合有什么区别啊
Asjun
2021-09-09 19:16:25 +08:00
C# 的 ?? 也是先看左侧的吧,a ?? b 等于
if (a != null) a
else b
abersheeran
2021-09-09 19:57:45 +08:00
@2i2Re2PLMaDnghL a ?? b ?? c 左结合就从左开始算起,右结合从右算起。
abersheeran
2021-09-09 20:01:36 +08:00
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/null-coalescing-operator

C# 的 a ?? b ?? c 等价于 a ?? (b ?? c)
mingshe 的 a ?? b ?? c 等价于 (a ?? b) ?? c
Asjun
2021-09-10 09:02:25 +08:00
@abersheeran 学到了,以前一直以为 C#的是左结合😂
2i2Re2PLMaDnghL
2021-09-10 09:23:25 +08:00
@abersheeran 我的意思是,这个操作不是符合结合律的吗?行为上左结合和右结合没有区别啊
如果 a 非 null,则无论左结合还是右结合都不会计算 b 或 c ;如果 b 非 null 无论左结合还是右结合都不会计算 c
至于有区别的是 C#独有的 ??= ,左结合就根本没法运算,因为左边的 ??= 出来的不是一个左值。
abersheeran
2021-09-10 11:35:01 +08:00
@2i2Re2PLMaDnghL 我想了一下,好像在这一个操作符上确实没什么区别。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/800871

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX