《The Way to Go》Chapter13 错误处理与测试
Chapter 13 错误处理与测试
错误处理与测试
Go通常在函数和方法中返回错误对象作为返回值,如果返回nil则没有错误发生
永远不要忽略错误,否则可能会导致程序崩溃!调用函数后必须检查错误
为了让代码更清晰,应该使用包含错误值变量的if 符合语句
if value, err := pack1.Func1(param1); err != nil { fmt.Printf("Error %s in pack1.Func1 with parameter %v", err.Error(), param1) return // or: return err } else { // Process(value) }
《The Way to Go》阅读笔记
Chapter1
go语言的发展目标
结合静态语言的安全性和高效性,动态语言的易开发性。
注意,go是静态语言(静态类型语言)。是类型安全和内存安全的编程语言。通过goroutine来实现并发并行编程,通过channel来实现gorountine之间通信。
像其他静态语言一样执行本地代码,但依旧运行某种意义上的虚拟机进行垃圾回收,不需要开发人员考虑内存管理的问题。
语言的特性
没有类和继承概念,使用接口(interface)来实现多态性,函数是基本构件
使用静态类型,强类型语言,隐式的类型转换不被允许
通关后简单地评价一下P5R
写在前面
从最早17年看狗头人玩女神异闻录5,到17下半年自己攒钱买了显示器和缩水版的ps4slim在寝室里自己玩,再到19年皇家版游戏发售找代购入了收藏版,我终于在22年年初换了工作之后忙里偷闲地把它作为psn平台上的第一个白金游戏通关了。
前前后后五年间跟这个系列之间的故事自然也不少了,虽然至今为止也不能说自己是一个很合格的系列粉丝——并不是那种真的和系列一起长大的玩家,除了通关了第五代游戏和在系列上花了不少钱其实也没有什么拿的出手的粉丝证明,但是还是想在这里简单地记录一下皇家版与我之间的故事,并以不成熟的测评人身份说说我对皇家版的看法。
注意:本文可能含有大量剧透,请尚未以任何形式通关《女神异闻录》《女神异闻录5皇家版》的读者自行选择是否继续阅读。
计算机图形学中的四元数
四元数与欧拉角
以下内容主要是参考了Krasjet关于四元数的介绍《四元数与三维旋转》:“点这里阅读《四元数与三维旋转》”
会记录一些阅读过程中遇到的结论性内容,系统学习主要还是参考原文档为主
复数
1.3 复数相乘与2D旋转
与复数 \(z=a+bi\) 相乘代表着\(\begin{bmatrix}a & -b \\b & a \end{bmatrix}\) 矩阵所作出的变换,将矩阵中的每一个元素都除以模长,可以得到以下变换:
\[ \begin{bmatrix}a & -b \\b & a \end{bmatrix} = \sqrt{a^2+b^2}*\begin{bmatrix}\frac{a}{\sqrt{a^2+b^2}}&\frac{-b}{\sqrt{a^2+b^2}}\\\frac{b}{\sqrt{a^2+b^2}}&\frac{a}{\sqrt{a^2+b^2}}\end{bmatrix} \]
从复平面观察可以得到,\(\|z\|=\sqrt{a^2+b^2}\) 且有 \(\theta=\arctan(\frac{b}{a})\) ,原本的矩阵转换为了两个变换矩阵的复合,其中左边的\(\begin{bmatrix}\|z\|&0\\0&\|z\|\end{bmatrix}\)是缩放矩阵,而右边的\(\begin{bmatrix}\cos( \theta)&-\sin(\theta)\\\sin(\theta)&\cos(\theta)\end{bmatrix}\)则是2D旋转矩阵。
unity中的原生对象与托管对象
序
最初在工作中接触到引擎原生层相关的问题,是项目实现的延时执行模块,模块提供接口来进行委托的延时调用:
// 返回一个token用于后续的CancelDelayCall
m_DelayExecuteGuidance = GameFacade.CurrentGame.DelayCall(8.0f, OnPlayerGuideFinished);
// 延时执行的代码示例
private void OnPlayerGuideFinished()
{
// 作为MonoBehaviour的成员方法,访问gameObject
Debug.Log(gameObject.name);
// something else...
}
延时执行模块与协程不同,不会因为gameObject的销毁而取消执行,假设在指定的8s后,组件绑定的gameObject已经销毁,那么试图在访问时就会产生这样的报错:
可以看到延时模块仍然保留了对MonoBehaviour的引用,但在试图通过property访问gameObejct的时候发生了报错,且提示代码位置为“managed-to-native”,体现了本文的主体:引擎的托管(managed)代码对原生(native)代码的访问,下面我们就集中介绍Unity引擎中的原生对象与托管对象。