百科问答小站 logo
百科问答小站 font logo



Python3.10的新特性match关键字为什么不会和当前作用域的变量名称match冲突? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

上下文关键字嘛,没什么特别的。


C#从第一个版本就支持上下文关键字,get和set。

然后从第一个版本就没有再增加过任何一个非上下文关键字,算是把上下文关键字用到极致了……



那么一个语言可不可以没有任何关键字,全部都是上下文关键字和可重载的运算符呢?

理论上是可以的,但是实际上这种语言会非常难用……




另外,这也叫做神仙语句?

           public static async Task<async> Async()     {       return new async();     }       public static async async()     {       await(Async());       return new async();     }      

你猜猜哪些async和await是上下文关键字?哪些不是?



然后更神奇的是,VisualStudio竟然可以正确的进行语法着色……(当然纸糊的这个你就别指望了)


user avatar   GalaxySnail 网友的相关建议: 
      

我最早也有同样的担心,但答案是不会,python3.10 的模式匹配语法是完全向后兼容的,这正是它的神奇之处。得益于 python3.9 中改进的新的 PEG 语法解析器,python 能够支持更加复杂的语法,这里就是一例:软关键字。简单地说,就是语法解析器能够识别,在应该当做关键字的地方,match 被识别为关键字,而在应该作为标识符的地方,match 就是合法的标识符,比如 re.match。case、甚至还有单下划线 “_”,同理也是软关键字。

但是,这样的改进很大程度得益于 PEG 解析器,它是一个解析器,需要解析语法。而一些语法高亮的程序通常并不解析语法,而只是进行词法分析,对于它们来说如何识别 match 这样的软关键字就成为了一个难题。比如语法高亮库 pygments 至今还不支持这些软关键字。




  

相关话题

  python setup.py data_files 设置要拷贝的文件,不能拷贝到安装目录下。要怎样解决? 
  为什么 C++ 没有 C 语言快? 
  如何评价 Webkit 推出的并发 JavaScript 提案? 
  为什么大部分高校还在只教C/C++/Java,而不教更加强大的Rust/Go/Scala? 
  如何从俄乌战争看待推出国产编程语言的紧迫性? 
  有什么好的自学 Python 的书籍推荐? 
  如何才能创造一门世界顶尖的中文编程语言? 
  C++对比其他语言到底难在哪里?有人对C++异常推崇,除了性能优势,还有什么优点,怎么学好C++? 
  Build 2015上微软宣布Windows 10支持Objective-C与Java编写的应用,这对C#与Windows自身有什么长远影响? 
  编程新手如何提高编程能力? 

前一个讨论
媒体报道称微软将关闭领英在华业务,真实情况如何?目前领英运营状况是怎样的?
下一个讨论
c#多播或event监听太多后gc和时间都会爆炸,那么比起List<Action>存在的意义是什么?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利