神话研究的历程

神话学入门

只有当神话与现实生活之间产生距离,人与神渐行渐远的时候,神话才能被客观地对待。因此,从神话的诞生,到将神话真正作为一门学科来研究,经历了漫长的岁月。

寓意说

和许多学科一样,针对神话的研究可以追溯到古希腊时代。在古希腊就已经有了一些关于神话起源的观点,最为主要的是寓意说和欧赫美尔主义。

公元前6世纪的色诺芬尼和泰奥格尼斯指出,神话的本质在于寓意。比如,《伊利亚特》中特洛伊一方和希腊一方诸神之间的战争,可以被理解为是各种元素之间的斗争。

寓意说认为,自然现象是神话的基础,在神话中反映着自然界的各种规律。另一方面,神话还是抽象的伦理观念的诗化结果,寓意着思虑、欲望等各种伦理的原理。

亚里士多德等哲学家、斯多葛学派,乃至十九世纪的自然神话学派均受到寓意说的影响。

欧赫美尔主义

欧赫美尔主义Euhemerism认为,神话中的神祇是曾经立下丰功伟绩的人。神是死后被人所崇拜的英雄,神话是英雄事迹的记录。宙斯创造文明的活动,可以被理解为英雄带领人类从未开化状态走向文明的历程。

这种观点源于古希腊的欧赫美尔,在希罗多德和柏拉图的著作中也有所体现。

徐松石对射日神话的解读就采取欧赫美尔主义的方法。他认为,十个太阳指的是十个君主,九日被射中,一日逃走,说明九个夷王被屈服,一个夷王逃之夭夭;或者九夷屈服而中原王朝再度兴盛。

有一些情况可以作为欧赫美尔主义的佐证:印度的土著民给那些卓越的或令人恐惧的欧洲人授予神的资格;类似的情况也出现在非洲、美洲、波利尼西亚地区。

阅读全文 »

豆瓣评分8.6

前段时间华为推出了10.3寸的墨水屏平板Matepad Paper,似乎非常贴合我对“平板”这一形态的需求。毕竟我手上的Matepad 11原本几乎唯一的作用就是阅读,而基本告别娱乐属性的墨水屏是强化这一属性最好不过的配置了。不过由于了解到华为对PDF的优化并不到位,阅读灯也没有色温调节,我还是把Matepad换成了文石的BOOX NoteX。

BOOX NoteX

在把那些买来就基本没读过的书来来去去搬过几回之后,我的纸质书“情怀”就转化为了对科技的崇尚。我决定不再购买纸质书,而是尽可能获取epub/pdf的版本,Z-Library全国图书馆参考咨询联盟也给了我这么做的充足底气,现在也有了这台不错的设备,没有理由不把阅读这件事捡起来了。

有多久没有从头到尾读完一整本书了呢?似乎大学以后,阅读就是为了查阅资料,或者在碎片时间里读些短篇故事,这也许也是数年间我的认知水平与思考深度未曾有过提升的原因。之后也许会试着每两周左右读一本书吧。

那么第一本书就是Z-Library推荐的《被讨厌的勇气》。它初看像是又一卷成功学厕纸,但读过之后却发现意外地有道理也有趣味。

这本书仿照类似柏拉图《理想国》的对话形式,以“青年”与“哲人”的辩论引出心理学家阿尔弗雷德·阿德勒(Alfred Adler)的理论,以图让读者找到“幸福”的真谛。

阅读全文 »

该文章译自Unity官网博客,原文:Custom == operator, should we keep it?

TL;DR: Unity的==是魔改版,与原生C#里的行为不一样。所以不要对UnityEngine.Object派生出的任何东西(包括MonoBehaviour)使用C#的空值相关语法糖,包括?.????=等等(三元运算符可以用),而应该老老实实使用== null来判空。

正文

当你在Unity中进行这样的操作时:

1
2
3
4
if (myGameObject == null) 
{
//...
}

Unity对==运算符做了一些特殊处理。与大多数人所期望的不同,我们对==运算符有一个特殊实现。

这样做是为了达到两个目的:

  1. 当一个MonoBehaviour有字段时,仅仅在编辑器中1,我们不会将这些字段设置为“真null”,而是设置为一个“假null”对象。我们自定义的==操作符能够检查某物是否是这种假null,并采取相应的行为。虽然这种机制怪怪的,但它能让我们在假null中存储信息,这样当你对它调用一个方法,或者读取一个属性时,它可以给你更多的上下文信息。如果没有这个技巧,你只会得到一个NullReferenceException,一个堆栈跟踪,但你不知道到底哪个GameObjectMonoBehaviour的字段是空的。而有了这个技巧,我们就可以在检查器中突出显示GameObject,也可以给你更多的提示:“看起来你正在访问这个MonoBehaviour中的一个未初始化的字段,请用Inspector将这个字段指向某个东西”。
阅读全文 »

其实19年在实习期间写CFET的时候,就有用到过Attribute这个特性[1],但当时并没有研究过它的作用和原理,只是照着文档给的案例使用。最近准备看看Unity中是如何用Lua实现热更新的,发现attribute满天飞,这就不得不理解一下了。

简单看了看,attribute似乎和反射息息相关,正好反射这块我也不太了解,这次就将一些相关的概念一并记录吧。

特性 Attribute

特性是一种标签,可以用方括号贴在各种元素[2]之前,给这些元素添加元数据。元数据包括编译器指令、注释、描述、方法、类等信息。

许多特性都附带一些参数,如在声明element的时候,通过带参的attribute附加元数据,按下面的格式使用:

1
2
[SomeAttribute(positional_parameters, name_parameter = value, ...)]
element

特性实际上是System.Attribute的一系列派生类,它们的后缀均为"Attribute",在打标签的时候这个后缀可以省略掉。

预定义的Attribute

微软在.NET库里已经内置了一堆System.Attribute的派生类,我们可能只会接触到其中一小部分,这里举几种常用的为例。

ObsoleteAttribute

Obsolete用于指示过时、弃用的元素。这些元素被认为不应该使用,因此在有调用到这种元素的地方,会产生Warning,并且附带参数message所包含的提示信息。如果建议使用某种新方案,就可以写在提示信息里。

对过时元素告警

另外,还有可选的第二个参数iserror,如果被设置为true,则会产生Error而不是Warning,阻止编译。

阅读全文 »