Unreal Script是整个虚幻引擎的核心,里面有很多很精妙的设计,尤其是在其整体的结构思维上;也有很多脑残的地方,虽然除了一些不常用到的地方发生的暗毛病以外,并没有特别不能忍受的,但作为一个吹毛求疵的伪处女座,如果不能做到有槽必吐逢杠便抬,牙齿难免痒痒。

本来这篇文章打算稍晚一些,在我完整地研究Unreal Script之后再写,但是今天遇到的这个问题,实在觉得是脑残之至,只想说语言的设计者被脑操了,先写出来,等待以后合并。

标识符(identifier)作为操作符(operator)?不知道是否在其他语言中有过先例,不过当我第一次在Unreal Script中看到这种应用时,新鲜之余,觉得这是个蛮不错的主意。比如说下面的代码:

curl = velocity cross force;

计算velocity和force(它们都是vector)的叉积,简单明了。

而且Unreal Script不仅允许重载操作符,还允许自定义新的操作符。比如这个cross操作符就并非(完全是)语言内建的,在object.uc中有定义:

native(220) static final operator(16) vector Cross ( vector A, vector B );

那时候我真心想为这样的设计鼓掌,直到我发现了一件事情:cross并未被声明为保留字,那么,一个变量的名字叫做cross是没有任何问题的。于是,下面的代码开始变得不那么正常了:

local vector cross;
cross = cross cross cross cross cross;

来试试更疯狂一点,别忘了Unreal Script里类名也是可以和变量重名的(尤其是当它不区分大小写时,更是雪上加霜)。先写一个类:

class SB extends Object;

再写一个操作符:

static final operator(16) SB SB(SB a, SB b);

然后,SB的事情开始了:

local SB SB;
SB = SB SB SB SB SB SB SB SB SB;

其实这还没完。考虑下面的代码:

final static preoperator vector myop(out vector operand);
function vector cross(vector param);

--以下代码在其他内--

local vector myop, cross;
cross = myop cross(cross cross cross);

最后这句你能看懂么?myop后面的那个cross,究竟是一个操作符(此时myop是一个vector),还是一个函数调用(此时myop是一个一元操作符)呢?

转载于:https://www.cnblogs.com/gdev/archive/2012/08/22/unrealscript-sucks-1.html

UnrealScript吐槽系列之一:标识符作为操作符相关推荐

  1. C++词法记号规则之标识符 关键字 操作符 分隔符 空白符

    C++学习笔记 词法规则之标识符 关键字 操作符 分隔符 空白符 转自http://blog.csdn.net/u013174689/article/details/17413755 标识符 标识符是 ...

  2. RxJava系列四(过滤操作符)

    转载请注明出处:https://zhuanlan.zhihu.com/p/21966621 RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) Rx ...

  3. (六)温故知新系列之RXJS——RXJS操作符基础(转化类)

    前言 合并类操作符把多个数据流汇合为⼀个数据 流,但是汇合之前数据是怎样,在汇合之后还是那样:过滤类操作符可以 筛选掉⼀些数据,其中回压控制的过滤类操作符还可以改变数据传递给下 游的时间,但是数据本⾝ ...

  4. Microsoft Dynamics AX2012 R2吐槽系列(4)

    之四 历经艰辛又搞出来一段代码,在SSMS中测试的时候好好的,结果跑到X++ 中,发现运行结果和运气相关,运气好的时候结果和SSMS中的正确结果一样,运气不好,结果是随机的,结果调查的时候那叫一个费尽 ...

  5. 日常吐槽系列~背锅篇

    背锅 丛林法则下的必备技能生存压力下的常态 弱肉强食的职场稍不留神就可能背锅不断 背负着本不该自己背负的重担而曲折前行 等待 是折磨意志力的利器因其不可预测而难熬 让人痛苦的不是坏的结果而是等待的过程 ...

  6. 【吐槽系列】如何用最贱蛋的方式将web程序变为桌面应用

    #前言 实在是想吐个槽,最近公司有个活,想要将我们写的web网站套在一个浏览器壳子里面,愣装桌面应用(zhuang b).然后健哥给我推荐了cef,顺道作者又手贱的去看了cefSharp和Xilium ...

  7. mac 键盘吐槽系列

    首先mac自带的有问题,问题出在哪?问题处在alt键,因为自带的输入alt加某些字母键会输入一些特殊字符.倒是我常用快捷键的人反感的很. 那么搜狗输入法问题出在哪? 问题出在vim编辑文本的时候,没法 ...

  8. openGauss数据库源码解析系列文章--openGauss简介(一)

    openGauss数据库是华为深度融合在数据库领域多年经验,结合企业级场景要求推出的新一代企业级开源数据库.此前,Gauss松鼠会已经发布了openGauss数据库核心技术系列文章,介绍了openGa ...

  9. Go语言自学系列 | 汇总

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,请移步至知乎网站,谢 ...

最新文章

  1. 改编码格式_编码不规范,同事真的会两行泪?
  2. ubuntu安装KVM虚拟机管理virt-manager
  3. 明日之后抄袭rust_古人怎么抄袭?何法盛偷窃原著,宋之问压杀外甥,班固参考史记...
  4. elasticsearch配置文件详解
  5. 2021牛客暑期多校训练营1 I-Increasing Subsequence(期望dp+优化)
  6. 2021年十大 web hacking 技术汇总
  7. NLP --- 隐马尔可夫HMM(EM算法(期望最大化算法))
  8. 【hiho一下 第147周】小Hi的烦恼
  9. Ubuntu16.04安装caffe教程(同时安装tensorflow与Pytorch)
  10. SwitchHost提示管理员身份运行,不能修改hosts文件
  11. android技术牛人的博客[转]
  12. 计算机平面设计是什么学的什么,计算机平面设计主要学什么?
  13. 利用计算机指令清理垃圾,Win7电脑清理垃圾的运行命令代码是什么?
  14. NEC Programming Contest 2021(AtCoder Beginner Contest 229) B - Hard Calculation
  15. 您的云,您做主:Google Distributed Cloud Hosted 全面可用
  16. soot的配置以及常见问题的记录
  17. 网易集团补贴百万,游戏开发者扶持计划!仅限30名!!
  18. 【吐血整理】Python 常用的几种高阶函数和简单的迭代函数
  19. (Delphi)如和下载网络文件的例子
  20. 学习Python中turtle模块的基本用法(4:绘制科赫曲线和谢尔宾斯基三角形)

热门文章

  1. 浏览器解析jsx_简单理解JavaScript,TypeScript和JSX
  2. linux下配置钉钉内网穿透_4G工业路由器内嵌花生壳PHTunnel,为工业物联网提供智能内网穿透...
  3. php html 停止工作,换行符php和html无法正常工作
  4. 无心剑中译切尼《当代的悖论》
  5. Python编程基础02:Python基本语法
  6. 数据库笔记07:实施数据完整性
  7. 2017.10.22 最多的方案 失败总结
  8. 计算机组成原理学习 笔记一
  9. 确定了C/C++的学习路线之后,便只能是一条路走到黑了
  10. 未来函数在线检测_嵌入式实时操作系统任务栈溢出检测原理