
在多篇帖子看到很多人把 map / reduce 称为语法糖,有些迷惑。加上大部分人对 Scala / Kotlin 等充满误解。 所以想调查下对于 V 友们来说,在 Scala 中什么样的语法是你们认为的语法糖?
先列举几个我知道的可能是糖的东西:
(123, "str") -> Tuple 的括号写法[T : Encoder] -> type class 用法match case + unapply -> 模式匹配的解构...等等
不知道还有哪些是 V 友认为的语法糖?
感谢 #4 楼补充
1 Jooooooooo 2022-05-12 20:08:19 +08:00 我认为语法糖应该是某种通用写法很常见, 所以用另外一种更简便的写法替代. 举个例子, java 里的 for(People p : peoples) 就是一种语法糖, 为了简化 for(i=0; i<peoples.size(); i++) 而搞. 为什么会做出这种语法糖, 因为后者十分常见, 所以就搞了前面那种更方便 /更易读的写法. 另外一方面, 遍历一个集合有前面这种简便的写法, 而每隔一个元素遍历就没有(至少我不知道), 应该就是这种写法不够常见吧 这有点点像语言里的缩写 |
2 TWorldIsNButThis 2022-05-12 20:20:41 +08:00 除了 C 的语法其他都是语法糖! 高阶函数都能称为语法糖也是没谁了 |
3 weiwen 2022-05-12 20:40:58 +08:00 声明变量的语法糖: val x = 123 声明类的语法糖: case class C(x: Int, y: String) 这样的语法糖数不尽数,垃圾 Scala! |
4 billlee 2022-05-12 20:42:30 +08:00 infix notation -> 方法调用 == -> equals |
5 zhuangzhuang1988 2022-05-12 21:38:35 +08:00 多。 |
6 zhusimaji 2022-05-12 21:42:09 +08:00 via iPhone 这糖真甜 |
7 zmal 2022-05-13 00:02:25 +08:00 via iPhone 非常非常非常非常多 |
8 zmal 2022-05-13 00:04:33 +08:00 via iPhone 可以这样定义:语法糖反编译以后是另一种比较嗦的写法。 |
9 ymmud 2022-05-13 08:40:52 +08:00 写起来还是很舒适的,可惜工作不给用 |
10 lmshl OP @zhuangzhuang1988 有哪些呢?能否举例? |
12 lmshl OP @zmal 可以这样定义:语法糖反编译以后是另一种比较嗦的写法。 =============================================== 如果这么说的话,Scala 岂不是除了 implicit / for comprehension / match case 之外,就无糖了? |
14 AoEiuV020CN 2022-05-13 10:35:33 +08:00 我觉得 java 的 stream.map 不算语法糖, 但 kotlin 那种直接给 list 加上 map 方法这种拓展就算语法糖了, |
15 lmshl OP @AoEiuV020CN Method Extensions ,算是应用比较广泛的语法糖了。Kotlin / Rust / C# / Scala 3 都有 first-class 支持 |
16 ericgui 2022-05-13 11:18:03 +08:00 说是 scala 在国内在衰落,是吗? |
17 lmshl OP @ericgui 是的,虽然是我们的钓鱼贴,我也回答了一下这个问题,https://www.zhihu.com/question/527828083/answer/2443925217 |
18 Fuxixixi 2022-05-13 14:35:30 +08:00 @lmshl 我刚来杭州的时候找工作 面试中无意认识了 scala 早期布道者钟** 我才知道有这个语言 确实国内挺少见的 不过听说是可以兼容 java 的? |
19 lmshl OP @Fuxixixi 这方面和 kotlin / groovy / clojure 一样,都能白嫖 Java 的生态。不同的是从 Java 调用 其他语言难易程度有区别。 Java 调用 Kotlin 最容易,调 Scala 比较难,其他的可能会更难。 |
20 Pangurban 2022-05-13 15:44:02 +08:00 个人认为一个有趣的语法糖:??? 实际上是 predef 里面的一个函数,名字就是 3 个问号: ``` def ??? : Nothing = throw new NotImplementedError ``` Nothing 是所有类型的子类,所以可以用在任何地方而不会报错 |
22 hepin1989 2022-05-14 00:52:10 +08:00 那根本不是糖,那叫做蜂蜜 |