本文整理自“莺见”微信公众号:


(全文约1.2万字,阅读大概需要24分钟)

读《乌合之众》的机缘,偶然从一位视频博主那看到了(事实上是听到,因为我总喜欢在睡前听一会儿,期望是快速入眠)对这本书的简介,印象最深的是对“crowd”这个词汇的释义,因此立刻从网上买下这本书,并不贵。

原以为这是一本读起来很晦涩的书,毕竟心理学方面我完全没有基础,不过读下来代入感很强,并不枯燥,其中有不少有趣的断言和案例。加上全书才不到12万字,短时间内读完并不困难,有一些章节我反复“咀嚼”了多次也不觉得枯燥。接下来,我尽可能地用我的理解对这本书加以总结和提炼。

大众心理学之大众二字,不同于普通心理学对个人的研究,它致力于描绘群体的行为模式。群体必然是由很多人构成的,他们往往能做出一些规模更大、影响力更深远的事情。因此,研究大众心理学,能让我们从新的视角看待历史上和现今社会上发生的一些事情,甚至有可能作出行为预测。

本书由三卷构成,所在篇幅比例大概是 1.5:1.8:1,它们分别是:

  • 第一卷 群体的心理
  • 第二卷 群体的主张与信念
  • 第三卷 不同群体的分类及其特点

我认为,就信息量的价值而言,是依次递减的,前两卷要远大于第三卷,因为第三卷里面包含政治、司法相关内容,和中国国情差别较大,因此我建议快速阅读即可,用以加深对前文的理解。如果你时间不充裕的话,甚至不阅读也不会影响太多。

受限于篇幅,本文我就只讲第一卷。

序言

勒庞在本书的序言中说到,“今天这个时代的主要特征之一,就是群体的无意识行为代替了个人的有意识行为”。我认为这句话是本书的核心观点,第一卷定义了什么是群体,第二卷解释了如何影响群体的行为,而第三卷则举例说明了这种行为。

如何理解这句话呢?勒庞生活的年代相当于从鸦片战争开始到抗日战争之前,对中国来说是近代最为动荡的一个世纪,其实对于法国来说也不太平。他作为军医参加过普法战争,并亲眼见证了巴黎公社的始末。而在他出生的70年前,又发生了法国大革命(攻占巴士底狱、路易十六上断头台)。可以说,勒庞看到或研究过近代法国的多次变革,而这些都是对法国、欧洲乃至整个世界产生了深远影响的重大事件。

为什么这么说呢,因为这些事件不再像之前由君主、皇帝这些贵族集团操控,而是由人民大众起事,可以称之为民族革命。这也意味着,过去由一人的行为,发展成了民族大众的行为。研究历史的走向,不再是研究贵族阶层,而是研究由无数人组成的群体。《乌合之众》这本书发表于中日甲午战争后不久,很遗憾没有来得及采用到中国在20世纪初的一系列的革命史料。

勒庞在讲无意识的行为时,提到一个词汇:本能。他说,无意识的行为是深藏在生物中的秘密,往往很难看到,很难解释。我觉得以此来类比,十分恰当。

勒庞认为,一个种族在思想、观念和信仰上是相当稳定的,但是一旦发生变化,就可能会造成一次历史上的大动荡。他引用的案例是罗马帝国的灭亡和阿拉伯帝国的建立。按照这个思路,我认为中国古代的农民起义,特别是明朝的建立,都属于这一类。

现如今(指1894年前后,距今130年),人们的思想又在发生新的变化,主要原因有二:

  • 宗教、政治和社会信仰被破坏
  • 现代科学和工业文明的发展

我想,勒庞提出如此理论应该是在担心很快有新的社会动荡。对于法国乃至欧洲来说,如果认为两次世界大战属于这类动荡的话,那么我们可以说勒庞作出了成功的预测。对于东亚、南亚来说,代表性的有印度和中国,当时毫无争议地正在或即将发生大动荡、大变革。这是世界的趋势,这种动荡是人类历史在近代的标志性事件,但是我们从更大的时间尺度来看,我们还无法确定这种变革在21世纪初这个时代是否已经停止。

勒庞认为,群体是野蛮、不讲理的,总是在搞破坏,即便如此,我们也无法阻止。事实上,群体的一项重要任务就是摧毁陈旧的制度和文明。从这一点上来看,陈胜吴广起义、黄巾军起义、安史之乱、黄巢起义、太平天国这些规模浩大的农民起义,确实符合其特点——虽然起义本身都没有成功(教科书告诉我们是因为农民阶级的局限性),但是都显著地缩短了统治政权的寿命,可以认为就是这些农民群体,摧毁了当时的腐朽制度。

当然,这些可称得上是大动荡的事件在2000多年里反复上演,则是多种因素构成的。发生一次社会变革,并不表示新政权就会吸取相应的教训。

第一章 群体的一般特征

勒庞所说的群体,并不是指物理上一群人的组合,他们必须要有某些相同的特质才能组成心理学上的群体。他这样定义:“自觉的个性的消失,感情和思想转向某个既定的方向,初步标志着群体正在形成”。

这句话也点出了群体的特征,即他从整体上形成新的“性格”,但并非是由个体的性格简单加和而成的,甚至是反面的。比如一个温文尔雅的人,在群体中很可能表现出暴力粗鲁的一面。就像大量脆弱的细胞能形成坚固的骨头一般。

勒庞提出,在人的社会活动中,有意识的精神生活只占一小部分,而无意识行为的作用却起主要作用。而这种无意识的行为,常常难以发现。如果你通过视频长期监控自己的一举一动,会看到大量自己根本不记得的行为,这些行为很可能只是受到脊髓神经控制的,而控制逻辑,则很可能来自于遗传因素。

一个种族中人群的无意识行为是趋于类似的,而且在个体之间差别很小,不会因为受教育水平的不同而产生巨大差别。正是这些共同的品质,当人们形成群体时,就会被放大到成为这个群体的特质,盖过了个体的个性。

那么是否意味着,不同种族的人群将更难形成群体?

也正是因为群体的特质来自于种族的低水平品质,因此群体整体上的智力是受限的,即“群体永远无法完成需要高知识水平的工作”。注意这是本书的一个很重要的推论。

这一推论很反常识,如果它是对的,那么将是对科学家团队的侮辱,比如在50多年前,美国的水星计划从提出到人类登月不也是在10年内完成了吗?

事实上还是要回到群体的定义上来,有组织的团队并不一定是心理学上的群体。勒庞对群体的定义已经作出了相当大的限定——它必然要求个性的消失,那么就意味着个体的长处就无法在组织当中充分体现出来。说回科学团队,你很难讲他们在一起工作时有什么明显的感情倾向,他们只不过在发挥自己的技能专长而已,谈不上情感上的维系。

于是乎一个更加令人咂舌的推论是:一群杰出的人组成的群体,做出的决定并不会比一群傻子强。这本书的中文译名乌合之众就是这么来的吧。

勒庞解释了之所以在个体和群体产生如此巨大差异,有三点原因:

  • 因为人多势众,个体在群体中会滋生一种不可战胜的力量,变得感情用事;
  • 人与人之间在情绪和行为上的强烈传染性,原因很难解释;
  • 最关键的原因,即容易接受暗示

我以为勒庞提出的这三点原因并不严谨,他在书中也说到第二点实际是由于第三点导致的,即正因为容易被暗示,从而导致了传染性。

这三点理解起来并不难,甚至有诸多案例可供印证。

人多势众形容个人在群体中的鲁莽行为是十分恰当的,我认为它的本质上仍然是暗示,暗示什么呢——做什么事情都无需负责。然而这显然是一种假象,这种暗示并非直接来自于人与人的信息交流,属于一种环境暗示。

法国大革命中发生了非常多的流血事件,类似事件200多年时间里一再上演。如果放在平时的独处环境中,他们几乎不可能做出如此行为,正是因为所处群体的环境下让他们丧失了独立的思考能力,变得为所欲为。

我认为,传染性是由于个人在群体中,对于得到的信息无法考证,在时间有限的条件下,只能被动相信的一种行为。历史上发生过多起由于恐慌心理的蔓延,导致人群踩踏的恶性事故。即便你对音乐再没有兴趣,在喧闹的歌舞厅、演唱会,也很难不被周围兴奋的人群所感染。传染不仅仅发生在人类社会,在动物身上也有明显的体现,比如马的炸群。

传染性不一定是负面的,也有许多积极的案例。比如处于高度紧张的战争中的士兵,领导者不一定需要军粮,但一定需要让大家士气大振的手段。士气就是一种能在群体中快速扩散的积极情绪,往往胜过机枪和大炮,甚至能反败为胜。我们能在历史看到太多太多即便拥有优势武器、人数和地形,仍然一败涂地的战例。在很多情况下,这种情绪甚至能够让人做出舍身忘死的举动,我们不能排除历史上的一些人物正是在这种群体环境下才做出了令人致敬的英雄行为的事实。

引起传染性的原因是容易接受暗示。我认为暗示仍然是在有限的时间内,在急需做出关键性行动的压力下,个体不得不根据有限的信息,经过简单推理或者没有推理(这是暗示则具象化为命令)而做决定的必然结果。关键点是有限信息、有效时间。如果你有充沛的时间,那么你就可以静下心来,尽可能排除群体氛围的影响,而做出更有理性的决定。然而,大多数情况下,你的思维早已被群体思维所淹没,你不愿意独自思考和决定,变得更加“随大溜”,相信最坏的后果也就是集体的后果,有什么可怕的呢。此外,你也会担心一旦自己的主见与群体发生冲突,将会被群体所针对和排斥。

在强烈的暗示之下,只要有一人最先喊出口号,就会有一群人振臂高呼,群体的鲁莽行为就这样产生了,而殊不知,这样的结果往往是少数人的期望而不是大多数人。作为群体,其实是被牵着鼻子走,其智力的低下体现得更加淋漓尽致。

第二章 群体的感情和道德

作为对上述群体特征的进一步分析和展开,勒庞从以下五点分别介绍了群体的各种特征:

  • 群体的冲动多变和急躁易怒
  • 群体的易受暗示和轻信
  • 群体感情的简单化和夸大化
  • 群体的褊狭、专横和保守
  • 群体的道德

毫不掩饰地说,我目前仍然无法断定这五点是否覆盖全面、是否有交叉,以及与第一章中的群体特征的关系。如果这五点是对前文三点的展开,那么我觉得有明确的对应是最好的。

既然勒庞没有明确指出,那么我们不妨自己尝试做一下理解和分析。

群体的冲动多变和急躁易怒

根据之前的分析,在群体中活动时,人往往受到的是无意识动机的支配,而非有意识的精神行为支配,换句话说,人们更加受到脊髓神经的影响,而非大脑的影响。

从这一点上看,群体的行为更加类似于原始人甚至是动物,受到外界刺激因素的反应更加剧烈。试想一下,你养了一条狗,你给它喂食,它会摇着尾巴乞好,你用棍棒打它,它会逃走,你真的弄疼它,它很有可能咬你一口。也许它不想咬伤作为主人的你,但是这种应激反应是不受大脑控制的。我把群体和动物做比较,是因为它们有着极大的共同点,就是低智。

在脊髓神经的控制之下,群体缺乏思考的能力,也就缺少了理性行动的机会,因此他的外在表现自然就是冲动多变的。只要外界刺激因为发生变化,就会导致群体的行为发生变化。

至于群体行为的优劣,则往往取决于外界刺激因素的不同。可以表现得很暴力残忍,也可以表现得谦和高尚。对于这两种结果,我在前面已经都举过例子了。

可以有一个推论,群体总是倾向于服从。这使得有野心的领导者利用大众来达成自己的政治目的成为了可能,中国历史上的数次农民起义无一不是如此。这要求领导者具有引导群体、煽动群体的能力,那么他们就应该对群体的心理有所了解,二战时德国的宣传部长戈培尔就是这种人的典型代表,这是后话了。

在冲动多变的基础上,群体总是倾向于对外界刺激导致的新想法加以实践,而人多势众的特征又让群体肆无忌惮。勒庞用了两个例子来证明:一是一份电报导致的普法战争,二是清末抗法名将冯子材的镇南关大捷,对法国来说无足轻重,但导致了法国总理下台。

如今,法国仍然常常上演着一出又一出群体的冲动,2018年的“黄马甲”运动,2024年的农民向政府大楼喷粪等等。事实上在网络上,这样的案例也无时不刻不在上演,我们看过了太多网络霸凌,引起舆论一片哗然,甚至必须政府部门发声才能平息。而这样事件的起因,往往是一些小事,其中很多还有诸多误会和反转。

例如2023年发生的祖孙二人插队事件,被送上热搜后,引起了一大波网友的愤怒,有甚者将二人的肖像做出了贴纸售卖。纵然二人行为多有不当,但何至于整个中国对其口诛笔伐。近期,梅西在香港表演赛上未能出场,导致整个中国成为其黑粉,这种愤怒甚至转移到了对阿根廷这个国家上,殊不知,之前呐喊“马岛是阿根廷的”的正是这群人。更加戏剧性的是,网友开始想起了C罗的好,回忆起了C罗来华时的种种细节,忘记曾经发出“梅罗时代,梅西完胜”论断的正是这帮人。群体的多变易怒在网络上体现得淋漓尽致。

总结一下,群体的冲动多变和急躁易怒可以认为是由于群体的无意识动机和人多势众所导致的。

群体的易受暗示和轻信

关于暗示,我在前面已经谈过很多了,这里主要讨论几个有意思的推论。

勒庞用了好几个案例来说明群体容易轻信的特质,或者称之为集体幻觉。当然,这种幻觉并非大家都像吃了毒蘑菇那样同时看到了不真实的事物,而是由于流言一传二、二传三这样子,逐渐让所有人以为自己看见过什么东西。

我能想到的一个经典案例,来自于1988年美国海军文森斯号驱逐舰在霍尔木兹海峡击落伊朗航空655号班机,造成290人罹难的事件。事后调查过程中发现,根据数据分析,发射导弹前负责监视飞机动向的雷达兵声称的“飞机正在俯冲”这一现象,实际并不存在。这一现象很有可能是当时的紧张氛围、有缺陷的技术数据对这名官兵的暗示所致,让他相信飞机正在俯冲攻击。

关于群体幻觉,近年来网上流传一个术语,叫做“曼德拉效应”。指的是很多人原以为曼德拉在上世纪80年代就已去世,事实上人家一直活到了2013年。类似的事情被网友挖掘出来了不少,什么“五十六个民族,五十六枝花”的歌词,又是什么儿时记忆中的动画片再也找不到了等等。

我认为这些都是扯淡,有这种心理的往往最初就只有一个人,他把所谓的遭遇煞有其事地讲出来,不断传播,以至于让很多人相信自己也有同样遭遇。而事实上很多人可能根本不知道曼德拉是谁,甚至在80年代还没出生,怎么会记得曼德拉的葬礼。所以我认为,所谓“曼德拉效应”充其量只是人云亦云的一次实验,证明了群体中易传染和轻信的特点,所有自称有类似遭遇的人都成为了实验对象。

勒庞认为,如果人们始终坚信自己的描述,那么我们就不能称之为欺骗,因为他们并不自知。而妇女和儿童更加容易受到影响,所以“妇女和儿童的指认在法庭上其实并没有多少价值”。

勒庞还提出了一个更加大胆的结论:“史书只是纯粹想象的产物而已”,“只有依靠神话,历史才能够书写下去”。

他认为,几乎所有的史实都是失真的,因为记录历史的人常常并没有真正看到历史事件的发生,那么一旦通过口口相传、人云亦云的方式获得史料,根据上面的理论,里面一定有大量的失实和幻觉。我们观察一下,中国历史上的二十四史,很多作者距离事件发生已经过去了相当长的时间,比如司马迁在《史记》中记录的三皇五帝,即便他参考了过往的史料,谁又能保证这些史料是真实可靠的。最终结果就是,我们看到的历史,往往是谎言、谣言和幻觉所组成。

我们无意在此攻击史书的价值,但仍要批判性地看待历史。

但是这并不重要,历史人物的行为,往往取决于人们想要他成为什么样的人。因此,即便真实的关羽是一个反复无常、自私自利的小人,但是历代的人们想要一个忠勇重义的形象,那么他就逐渐被人们塑造成了忠义无双的关二爷。

最终结果就是,真正的历史始终在被歪曲,那么教训就很难传递给后人,人们总会在同样的问题上摔跟头,人们所能得到的教训就是他们永远不会吸取教训,就如同那些去旅游被三番五次骗到玉石商店,听店长太子一顿忽悠的大爷大妈们。

群体感情的简单化与夸大化

我认为这一条和第一条在某种意义上是重合的。

正因为群体智力的下降,群体就会自然而然凸显出感情的简单化,进而表现出多变、易怒的原始人特质。也正是由于传染性以及人多势众的心理作祟,群体就会自然而然地对所得信息进行夸大化传播,毕竟无需负责,进而导致冲动和急躁的特点。

所有起因于低智力、容易接受暗示、人多势众、易传染这些因素的后果,似乎都可以归类为群体的特征。

我认为至少在对秦桧的切齿之恨上,以及对诸葛亮的极尽崇拜上,多少都体现了民族感情的简化和夸大。如果说这是历史造成的偏差,那么我们讲一讲现代。

2011年日本福岛核设施被地震引发的海啸破坏,2023年日本开始将受损核设施的冷却水排海,两次事件都引起了国人的囤盐热潮。如果说这批人中绝大部分人并不清楚氯化钠对核辐射有怎样的效果,我是不相信的,这是最基础的科学知识了。但是这样的事件依然发生,显然就是食用盐功能被夸大后的效果,也是群体恐惧核危害的感情被放大了,于是我们从中看到了群体的传染性是如何工作的。

群体的褊狭、专横和保守

褊狭(biǎn xiá)算是一个不常见的词汇,代表肚量小。

我认为这一特征和前两条仍然有重合。感情足够简单,自然就变得不容事,这和儿童的感情很类似。群体对外来的意见,通常要么全盘接受,要么全盘否定,因为群体没有足够的智力精挑细选,你必须喂给它现成的、无需更改的观点。那么这种观点必然是足够简单、容易被接受的。

至于专横,毫无疑问和前述的急躁易怒、感情简单有着千丝万缕的联系。正因为人多势众,事无忌惮,群体对外才表现得如此专横霸道,他们认为自己无所不能。暴力是专横的直接后果,发动法国大革命的那帮人,建立巴黎公社的那帮人,平时大多都是市井平民,却能干出流血的勾当。

如今在人多势众的场合,专横仍然屡见不鲜。有社会物业的保安集合与业主大打出手,也有因为刚好错过免费高速时段而聚集堵塞收费站的司机。即便是农村的土狗之间的战斗,都懂得拥有压倒性的成员数,就意味着成功了一大半。

然而专横直接带来的暴力行为掩盖了群体的另一特质,即保守。正因为群体的褊狭、低智,他们才不愿接受需要更多脑力的新事物,墨守陈规是群体的本能,为此,他们愿意抹杀一切新事物,名义上是“不习惯”,很多时候,这都是诸多抱残守缺的故事之根因。

昔日的那帮八旗子弟无法接受西方工业革命带来的巨大变化,实行闭关锁国的政策,就是一个很好的例证。历史上的王安石变法、戊戌变法等共同点都是受到了保守派的巨大阻挠而失败,但却不一定归咎于群体的保守本能,因为它们所处时期,群体的力量还不足以引起关键性影响的程度。相比之下,日本的明治维新虽然也遭遇到了旧武士阶级的武装叛乱,但是新政府改革决心坚定,拥有人数上的优势。

中国在改革开放的40多年里,特别是近20年由于互联网革命的兴起,大量的民众受到了强烈的影响。几十年前,相对于普通的农民,工人是一个更优越的社会阶层,拥有着让人羡慕的铁饭碗,只要能进厂,就能保证一辈子吃穿不愁,还能分房。这一状态甚至持续到了90年代中后期才发生了比较大的变化,我们熟知的下岗潮就发生在这个时期。太多人受不了如此巨大的落差,导致生活困难,成功转型的毕竟是少数人。

2023年的一部电视剧,范伟主演的《漫长的季节》,里面很好地展现了这一时期的民众生存状态。我认为这与我们现在讨论的群体保守问题是相符的,只不过,即便工人群体对于下岗表现出了激烈对抗的态度,但对于最终的结果却于事无补,对于政权和社会的稳定也没有产生明显影响。我想这有几方面原因:

  • 受到影响的工人阶层在社会中仍然属于少数人群,他们是城市中的一份子,但是对于占人口绝大多数的生活在农村的农民没有产生影响,事实上,农民们可能更愿意看到工人阶层的落寞;
  • 广大的工人阶层是在很长的一段时间里逐渐受到影响的,时间可持续10-20年,并非在短时间内全国如此。作为铁饭碗基地的东北地区影响更大,但是广大南方特别是深圳珠海早已在改革开放的春风下志得意满

如今,逼近21世纪20年代中期,如此变革仍然在发生,在过去十年互联网经济特别是疫情过后的直播经济兴起,曾经失去国企铁饭碗但是成功下海经商的那帮人,他们或者他们的下一代又要面对极度内卷的线上经济打压。而互联网行业的饱和甚至下行,又要影响多少计算机专业的大学生。

但不要以为这些就完了,未来变革发生的周期会越来越短,AI可能又会导致一大批人群的工作和生活发生巨大变化,我们能在这其中紧跟脚步吗?

群体的道德

基于前面的讨论,群体必然在道德上是不足的,因为急躁易怒、专横褊狭的这些特点明显与道德背道而驰。

但是很意外地,群体有时候也会表现出一些优良的品质,如无私、舍身忘死、忠诚等等,甚至比个人独处时表现得更加明显。我们不确定这种特征是否是群体传染性的结果,但能肯定的是,只要有一点道德的苗头,群体就会放大这种感情。

这种品质往往会让群体慷慨赴死,比如清末的戊戌六君子,以及在泰坦尼克号沉没时为他人让出救生艇位置的梅西百货创始人夫妇,电影《赛德克·巴莱》中为男人解除后顾之忧而集体自缢的妇女。而在卢旺达大屠杀和二战集中营中分别散尽财产解救上千人性命的那两位绅士,我无法断定他们的动因是什么,但和群体能表现出来的这种异常的高贵品质同样让人钦佩。

勒庞认为,正是需要群体的这种无意识的美德,文明才能出现,否则人们都理智地考虑自身的眼前利益,就和独居动物无异,这种群体中才看到的道德,鲜有在动物群体中出现。

勒庞说,群体的特征在妇女、儿童这种低级进化形态的人群身上更容易看到。当然,我们今天只能以儿童来举例,小孩子的不成熟体现在种种方面,比如脾气、判断力、智力、谎话,同时也包括爱心。这几点刚好能映射到上述五点群体特征上来。所以我们可以说,群体的行为从表象上就像小孩子一般,只要有一位成人作为领导人,群体就很容易俯首帖耳,如果放任不管,最终就是一堆散沙。不过不要轻视这堆沙子,只要足够多,仍然可以像流沙一样危险。

第三章 群体的观念、推理和想象力

群体的观念

勒庞认为,历史上发生的大动荡,往往都是由于群体的观念发生了变化。他依然举了法国大革命的例子。随着“自由、平等、博爱”的观念深入人心,法国人推翻了皇权的统治,在一个世纪里不断混乱,同时也引发了整个欧洲的动荡。

中国历史上的每次农民起义是不是也是观念的变化呢?要辩证地看,直接原因肯定是底层穷苦人民萌发了当前政权不值得继续效忠的观念,但深层次的原因仍然是不揭竿而起就活不下去了,从这一点上我们能看到群体保守的本能。

如果指望群体能在衣食无忧的环境下,为了争取自由、民主而去发动革命,显然是痴人说梦。即便是法国大革命,诱因依然是由于自然条件等因素导致的农民生活困难。

这种观念是由于客观因素一时兴起的,勒庞将其比喻为河水上泛起的小水花,更能引起人们的注意。不过,对群体影响最深的是那些遗传来的稳定关键,比如说宗教或者儒家思想。

这种稳定观念的形成需要漫长的时间,但是一旦形成,就会持续在群体的行为中发挥重要作用,想改变它难于登天。我们在理解一个国家、一个民族的行为和观点时,必须考虑到该民族的这种历史化沉淀的观念。

比如所谓中国的传统观念里,尊老爱幼、尊师重道等美德不断被宣扬,中国社会不允许出现半点与之相悖的言论出现,否则必然口诛笔伐之。还有一些,比如过年、婚育、工作等等,随着时代的发展,也出现了一些和现代社会发生冲突的观念,但并不占据主导地位。这些不再完全符合传统的观念主要出现在受过教育的年轻人身上,而且深受西方文化影响。

观念没有高贵和低贱之分。一个明显不合理的观念,只要被融入到无意识领域,即便在短时间内能被改变,但是很快就会重新回到原点。因为这时候的观念已经成为了群体感情的一部分。出生于上世纪五六十年的很多中国人经历过不能随心所欲吃饱饭的年代,因此普遍有着节俭的观念。如今即便生活物资足够丰富,也被教育过吃下腐败食物的害处,但是面对一个只出现一个黑洞的苹果,第一反应仍然是削去腐坏部分然后吃掉。

群体的推理

由于较低的智力,群体的推理也是粗浅的,甚至常常是错误的。勒庞认为,群体的推理能力浮于表面,更加是片面的。

于是,群体看待事物往往将特殊的当作普遍的。美国人从李小龙身上推断出中国人都会功夫,就好像全中国人都认为内蒙古人每家都有一个大草原一样。

如果有人精通群体的这个特征,就有能力以极端的、片面的、夸张的语言来煽动群体的情绪,并且常常是有效的。这在如今的网络上屡见不鲜,俗称“带节奏”。它会将一个孤立的为师不端事件,渲染成普遍的师生不睦现象,也能根据某些少数人群的个案,培养出一大批地域歧视。

可见,“群体不具备任何批判精神”。

群体的想象力

群体拥有十分丰富、强烈、活跃的想象力。说得更明白一点,就是群体总是会将看到的表象当作是真实的东西。

缺乏由表及里看待事物的能力,让群体的感情更容易被生动的形象所打动。领导者如果明白这个道理,就具备了驾驭大众的能力。

我们熟知的宗教无不是构建了一幅虚无缥缈的图景,激发出信众对伟大、崇高、博大的神的想象力。如果说这些对现代人都还不够形象的话,那么假设曹操麦田割发代首是真实事件的话,对当时在场的士兵一定是形象生动的,严明的军纪将得到切实的贯彻。

今天,对于在乌克兰战场上频频损失的俄罗斯人来说,没什么比总统普京隔三差五坐上轰炸机在天上兜一圈更加能激发民族斗志的了。

勒庞认为,“影响民众想象力的,是事件扩散和传播的方式,而不是事实本身”。因此,舆论控制是很多政权的必修课之一,特别是谣言。我们知道,中国对网络谣言的控制近年来愈加严格,谣言在开始传播后很快得以纠正,公众接受辟谣的信息来源往往是政府机关。虽然西方崇尚言论自由,但仍然不代表对谣言放任不管,比如美国特勤局就会持续监控网络言论,对严重的谣言制造者也会采取逮捕等强制性措施。

第四章 群体信仰所采取的宗教形式

前面我们也提到过,群体的信念十分牢固、持久。有一种特殊的观念,包括对首领或者信条带有无比虔诚、狂热的崇拜,甚至已经达到了造神的地步,我们管它叫做“宗教感情”。

上升到宗教感情的领域,群体对观念的坚持已经不满足于自身,而是积极地寻求传播,并且在此过程中会褊狭地不允许任何异见的存在。因此该种群体往往是社会动荡的重要因素之一,他们常常会造成冲突、流血甚至牺牲。

历史上的十字军东征以及上世纪的两伊战争,都有浓烈的宗教色彩,不过这种规模的冲突还带有很多其它因素,比如统治阶级的利益,所以并不是很好的能说明群体宗教感情的素材。

现代也有一些典型的案例,在中国互联网上,存在着饭圈文化这一现象。有些粉丝群体对所谓偶像的崇拜之极,往往让常人难以想象。去机场接机、购买唱片、表演门票仅仅属于入门级别,花巨资购买热搜流量也屡见不鲜,更有甚者在线下举办偶像生日会——自然只能是这群人自嗨了。

随着不断推陈出新的热门艺人,各自的粉丝群难免存在冲突,互撕谩骂、应援打榜、造谣攻击比比皆是。偶像们本人之间可能还没有交集,而粉丝团之间的战争往往已经愈演愈烈,甚至战况本事又上了热搜,产生了极坏的影响。而这些事件的导火索,往往仅仅因为某一个人的出言不逊。他们之间的争斗原因已经从对偶像的不敬,演变成了对自己信仰的挑战,这就说明他们已经形成了带有宗教感情的群体。

我们还需明确的一点是,历史上的大动荡,领导者只是扮演了煽动和点火的角色,真正的幕后主使仍然是群体。一个事件之所以会发生,是因为群体想让它发生。俄国的十月革命,我们很难想象靠列宁一人就能让它实现,其背后显然是那些想革命的俄国民众。但无需被群体的意志力和执行力所迷惑,只不过群体靠着人多势众在社会活动中发挥的作用越来越大。

总结

第一卷内容是本书的最重要部分,即便读到此为止,你也掌握了足够多的群体概念知识,具备了看待历史和当今社会重要事件的新眼光、新视角。我们来简短整理一下这一卷的逻辑。

由于人多势众、传染性、易被暗示的原因,个体在群体中时与独处时的表现大相径庭。他们原来的个性消失了,取而代之的是统一的感情倾向。整个群体表现得更低智、冲动、易怒,专横,在看待外部的新事物时,更加褊狭、保守以及轻信,就如同一个不成熟的孩子一样矛盾和善变。但这并非完全贬义,在适当的外部刺激下,群体也能表现出更高的道德品质,甚至远远超过个体的道德水平。

观念是驱动群体行为的关键原因。群体对观念的接受是极其迟钝的,需要相当长的时间才能深入人们的意识中,但一旦被接受,就很难去除,以至于即便其中的部分观念是错误的,群体的领导者也无意与之对抗。

由于群体的低智,他们的推理能力也十分有限。在形象的外界因素刺激下,他们更容易产生丰富的想象力,进而形成对信条或领导人的狂热崇拜。这时候,一种近乎宗教的群体就诞生了,为了维护他们的信仰,群体不惜发动血腥的暴动。历史上的诸多社会动荡都是如此被点燃。

认识到群体的特征之后,有野心的领导者就会开始着手制定驾驭百姓的手段和策略了,比如阿道夫·希特勒。我们将在下一文中继续讨论相关话题。

对于守分的普通人来说,假设我们未来身处群体环境时,是否有那么一丝机会,在某个瞬间能够打通第四维度,意识到自己正在被群体感情所控制呢,就如同黑客帝国的主人公?

(文中大部分图片采用AI生成)

本文整理自“莺见”微信公众号:


开篇

我继续阅读19世纪美国作家爱伦·坡作品。他的一些作品我觉得称之为小说太过了,因为涉猎范围太广了,有的是侦探小说,比如《玛丽·罗杰疑案》,有的是惊悚小说,比如《贝蕾妮丝》,有的属于科幻领域,比如《气球骗局》,今天我要讲的这部 《欺骗是一门精密的科学》,和《过早埋藏》在内容形式上比较类似,都是由一系列相关的故事整理而成,不过在领域上,则属于爱伦·坡自己对于一些事物的思考和理解,从这一点上来看,和《森格姆·鲍勃先生的文学生涯——《大笨鹅》前编辑自述》更属同类,只不过后者以含沙射影的方式呈现。这种就很难称之为小说,因为他讲述的一种事物、一种现象,却不是由完整的故事串联起来的。

《欺骗是一门精密的科学》先讲述了爱伦·坡对于欺骗的理解,而后通过一系列的小故事来呈现。

欺骗(1):买沙发

一位家庭主妇在一家家具商店看中了一张她中意且价格低于自己预期的沙发,于是她毫不犹豫地将其买下,付过钱,留下了地址,然后就回家等待送货了。

但是,等来等去,甚至到了第二天,沙发都还没有送过来。家庭主妇于是派仆人前去询问耽搁的原因。但是商店老板矢口否认有这笔交易,根本没收到过钱。原来,与家庭主妇交易的是一个冒充老板的骗子。

这种李鬼骗术非常常见了。近几十年来由于网络的普及,这种诈骗往往以网络和电话的形式进行,比如知名的缅北电信诈骗,常常就以伪造特定人员身份的形式进行,如海关、警察等国家职能部门。在线下倒不多见,毕竟骗子需要避开正主,我印象里比较深的是陈翔六点半中的一则视频,以电动自行车为道具实施了连环诈骗,算是一种这种骗术的升级版。

欺骗(2):找零钱

一个衣冠楚楚的人来到一家商店,买了1美元的东西,但是却发现没带钱包。于是他和老板提议,将东西送到他家,并带上4美元的找零(因为当时的1美元比价值钱,所以老板才愿意送货上门)。

接下来老板就派一名伙计前去送货,然后“偶然地”在路上碰到了那位顾客。顾客表现得很惊讶,他说由于他还想去买其它东西,因此提议先把找零给他,让伙计继续去送货,并煞有其事地说他妻子正在等待送货上门。

显然,那名伙计并没有找到顾客的家,他是一个骗子!

这种骗术考验人对人的信任。这位老板起码最后还拿回了货,但现实当中钱货两空的诈骗比比皆是。和老百姓息息相关的,比如在咸鱼上买东西或卖东西,碰上不靠谱的买家卖家,往往就是钱货两空。有一个问题值得深思:拼多多上的退款不退货,算是什么呢?

欺骗(3):关税单

这个骗术和第一个故事几乎相同。一艘正准备起航的货船船长,从一个官员模样的人手里拿到了价格公道的关税单,因为急于起航,立马就交钱签字了。

不曾想,15分钟之后,另一个人送来了价格更高的另一份关税单,原来前面那一个收税员是冒充的!

可见事出反常必有妖,成年人不应该幻想白来的好事。

欺骗(4):遗失的钱包

同样是发生在船上的故事,一名乘客火急火燎地赶上了正要解缆起航的汽船,忽然弯下腰捡起了一个钱包,问道,这是谁丢失的钱包?

竟然没有人应答,这位乘客发现钱包里面有大量的现金,这引起了轰动。船长要开船了,已经没有时间等来失主。

于是,这位乘客向岸上的一位先生提议,由他来持有这个钱包,等待失主的到来,并声称失主一定会付出酬谢。

那位先生回答道,你才是应该拿到报酬的人,毕竟是你捡到的钱包。乘客说,那好吧,但我只需要50美元,这里面全都是100美元的大钞,你先给我找零吧。

于是,那位先生就先给了乘客50美元,这时汽船开走了。

半小时后,那位先生发现钱包里面的百元大钞全都是假钞!

这次骗局需要非常多的因素共同作用,在现实中几乎是不可能实现的,它太复杂了。现实中的骗局往往更简单,如果你常常上网,应该会发现非常多的类似案例。
比如,有人在你面前突然从地上捡起了似乎是别人丢失的财物,作为共同见证者,他提议和你均分。但是这财物不可分割(可能是物品,也可能是大钞),因此提议东西归你,你给他找零。
印象里我就曾经遭遇过这样的事,但具体是我的亲身经历还是只是看到的新闻,已经记不清了。总之这种骗术在现在几乎已经过时了。

欺骗(5):过桥费

在某地将举行一次聚会,到达那个地点需要经过一座可自由通行的桥。一个骗子出现在桥头,向每一位过桥人或骡马征收通行费。由于所有人都不知道这座桥本身就是免费的,因此只能交费通行。

毫无疑问,这种骗术主打一个信息差。在2023年这种粗暴的、无耻的骗术仍在上演:微软知名编辑器软件Visual Studio Code竟然被某国人包装成收费软件要价70块!

欺骗(6):狗肚子里的欠条

某骗子欠一位朋友一笔钱,那位朋友持有这份借款的字据。于是,这个骗子就用同样类型的字据,蘸上肉汤让他的狗纵身扑食。时间一长,这条狗就会觉着这样的字据是一种美食。

等到该还钱的一天,骗子带着这条狗来到了朋友家里,等到朋友拿出了那份真的字据,一口就被狗吞下了肚子。

这已经不是诈骗了,这是赤裸裸地耍无赖!接下来应该是一场恶斗吧,但是毕竟对方有狗。

欺骗(7):英雄救美

一名女士遭到一名男子的攻击,这时骗子出场了,他飞身相救,将攻击者击倒,并送女士回家。女士问该怎样感谢他,他说你借我两块钱吧。

显然,这两块钱要和那位站着不动等着被击倒的同伙一起分赃。

这类骗局有可能成为狗血爱情故事中的一环,但也可以通过变形的方式出现在日常生活的方方面面。说到底,这是“托”的行径。“托”无所不能,有的在售楼处营造售卖火热的假象,有的在奶茶店反复排队打造新的网红饮料,有的则在农村大集上为老头老太吹嘘保健品的疗效,不胜枚举。

欺骗(8):雪茄与白兰地

一个骗子来到一家酒馆的柜台,要了两支雪茄,闻了闻,和伙计说,我不太喜欢这种烟草味道,给我换一份白兰地吧。

喝完白兰地,骗子就径直向门口走去,当然被酒馆老板叫住了。

“先生,你的那杯白兰地还没有付账”。

“我用雪茄换的白兰地呀!”,骗子说道。

“你的雪茄也没有付过钱”。

“雪茄没抽我付什么钱呀”,说完骗子开门扬长而去,留下一脸惊愕的酒馆老板。

这则故事大家一笑了之即可,毕竟不可能真的发生,不过应该可以发现,这和宋小宝在小品《吃面》的故事几乎一模一样。
我们不能断定小品的编剧就是参考了爱伦·坡的这部作品,也许只是时隔百年的巧合。况且保不齐爱伦·坡也是从哪里收集来的素材,我不能再考证清朝道光之前的西方文学内容了。

欺骗(9):招聘

最后一个骗局,爱伦·坡用了很多文字,但是情节却不复杂,我试着归纳一下。

一名看起来像实业家的中年绅士租到了一间房子,并且要求房东在特定的时间来取房租,他不会提前付账。

接下来,他登报发布招聘计划,并声称新设立的公司更看中员工的品格,因为员工入职后将经手巨额款项,虔诚的教徒优先录取,并需要缴纳50美元保证金。

结果呢,自然是多名求职者的数百元保证金不翼而飞,连房东的租金也找不到人要了。

我们必须感叹,我们认为新奇的荒唐之事,在历史上都能找到原型。
当今社会,我们无时不刻不在遭遇到老板跑路的困扰,不论是包工头还是健身房。即使在招聘上,我们也能看到点子欺诈,入坑传销等事件。更有甚者,贷款上班也是常见之新闻。

爱伦·坡的欺骗观

欺骗是人类的天性,是其他物种所不具有的特质。人从一出生就开始欺骗,直到其终老死亡。欺骗包括一系列元素:细小甚微、自私自利、不屈不挠、足智多谋、胆大包天、从容不迫、别出心裁、傲慢无礼和喜欢窃笑。

不过毕竟爱伦·坡不是在写论文,大可不必去严格论证他的这些描述在结构上和逻辑上是否自洽规整。他更善于的是形象——形象地描绘了欺骗的特点。

姑且不论欺骗的善恶,单论欺骗所需的技巧,足以显示出人类作为高级动物所倚杖的智慧。智慧之下的却是狡诈、势力和粗鲁,但这是生而为人、为动物所注定的。爱伦·坡讽刺欺骗,但是也不得不承认欺骗是人之社会最普通不过的现象,从200年后的我们来看,这将始终伴随着人类的发展。在信息化的时代,未来机器会不会学会欺骗呢?


我阅读的是来自于江西人民出版社出版的,曹明伦翻译的《乌鸦:爱伦·坡短篇小说精选》一书。

本文整理自“莺见”微信公众号:


最近励志读完全部爱伦·坡作品,太多关于心理、恐怖、幻想的哥特式文体实在过于烧脑,不想今天遇到一篇风格完全不同的文章《生意人》,为我添加了许多笑料,我想应该是爱伦·坡作品中极少的轻松、诙谐类的内容。

主人公(以下称为“我”)自诩为有“条理”的生意人,这一些都要归功于小时候因为吵闹而被保姆倒着抓起来,脑袋磕到了床柱上,鼓起来一个疙瘩。“我”认为这是自己的“条理器官”。

“我”鄙视传统的天才,因为他们都过于循规蹈矩,任何正当的职业实际上都是蠢材在做。

“我”曾经被父亲推进了一间账房做事,不过两三天后就受不了了,因而抱病回家,终于在六个星期后捡回了一条命,不过还是庆幸摆脱了再去账房的“厄运”。

“我”16岁开始离开家闯荡,开始了一系列的匪夷所思,令人啼笑皆非的职业经历。

“我”的八种生意经

第一份工作是服装流动广告界。名字听上去很高大上,实际上是在街道上招揽顾客到服装店消费,这里面含有一定的忽悠成分,比如“毁损黑布料按墨绿色布料售出”。

虽然爱伦·坡在将近200年前写下这篇作品,不过并不过时。这种勾当让我想起了超过15年前,当时在西安上学的我,和来西安旅游的亲戚包了一辆出租车游览秦皇陵兵马俑的经历。
司机将我们带入了一间玉器大卖场(现在大家都清楚旅游城市玉石生意的水之深了吧)。好在司机提前和我们沟通过进去看看就行,只为了商场奖励司机的加油票。但是恐怕并非所有司机、所有旅游城市都如此透明,近年来欺诈游客的恶性事件不可尽数。
最近刚刚发生一起云南丽江一个旅游团因为一家游客没有买5万元的玉器,将其抛下的事件,造成了非常恶劣的影响,我打赌整个行业、政府有关部门不会吸取任何教训,类似事件将持续发生。

一般这种角色都需要外向的性格和积极的沟通能力,一旦成功,就会有一定的佣金激励。不过看到“我”的账单——是的,有条理的“我”做这种工作必然要仔仔细细、一丝不苟地记账:

金额$
7月10日 常规街头行走并领客上门 0.25
7月11日 同上 0.25
7月12日 撒谎一个,二级;毁损黑布料按墨绿色布料售出 0.25
7月13日 撒谎一个,一级;特别质量和尺寸;推荐水磨缎为绒面呢 0.75
7月20日 购新式纸衬衫领或称假前胸,以衬托彼得呢外套 0.02
8月15日 穿双衬短摆上衣(温度计在阴凉处显示华氏706度) 0.25
8月16日 单腿站立三小时,以展销新式背带裤,每腿每小时12.50美分 0.37½
8月17日 常规街头行走并领回顾客一名(肥胖大个儿) 0.50
8月18日 同上(中等个儿) 0.25
8月19日 同上(小个儿并出低价) 0.06
$2.96½

折腾了一个多月,收入还不到3美元,百分之一百是吃不上饭的。即便如此,最后仍然因为佣金的问题和服装店铺的老板撕破了脸,不欢而散。原因仅仅是因为账单中最小的那一笔——0.02美元,服装店老板只认可其中的一半。就这样,虽然“我”失去了这一份“生意”,但仍然感到骄傲和欣慰——因为“我”是熟悉这门生意行情的。

“我”的第二份生意是“眼中钉”,这可是一门了不起的生意。顾名思义,具体操作方法,假如有人想盖一座大楼,“我”就在要盖楼的地址附近占住一个角落,等到大楼盖了一半,“我”就建起一座虚有其表的建筑,比如农舍、塔房甚至是猪圈!

建筑商当然会要求“我”拆除,当然“我”自然会漫天要价,不给的话,“我”就晚上用烟灰涂黑他们的大楼。结果,“我”被送进了监狱。

显然,在涂黑人家大楼之前,“我”的所作所为并不违法。

这种不犯法但是恶心人的行为在当今社会也比比皆是。比如洗车店不交保护费,黑社会就开车来洗一整天。再比如收不到运费就不让卸货的货车,会被货站调来两辆车前后夹击,不让你动。最终目的无非都是敲诈勒索,爱伦·坡的那个美国早期时代有这样的事,200年后又岂有消失的趋势?

“我”的第三份生意是“挨打”,并依然为此记录下了日记,大家感受一下原文:

“1月1日(元旦):街头偶遇斯纳普,步履踉跄。备忘:潜在主顾。稍后又遇格拉夫,酩酊大醉。备忘:也是潜在主顾。二位绅士均记入分类账,并各自开立流水账户。
“1月2日:见斯纳普在交易所,迎上猛踩其脚。他握紧拳头,把我击倒。妙!重新爬起。在索价上与代理人巴格有细小分歧。我拟索要伤害赔偿金1000美元。但巴格说那样被人一拳击倒我们至多只能索赔500美元。备忘:务必辞退巴格,此人毫无条理。
“1月3日:上剧院寻格拉夫,见他就座于一侧面包厢,在第二排一胖一瘦二女士中间。用剧场望远镜观察那伙人,直到看见那胖女士红着脸对格拉夫说悄悄话。我起身过去,然后进入包厢,将鼻子凑到他伸手可及之处。他没扯我的鼻子,初试未果。擤鼻再三,仍未成功。于是坐下朝瘦女士眨眼,此时心满意足地感到他抓住我的后颈把我提起,并把我抛进正厅后排。颈关节错位,右腿严重撕裂。欣然回家,喝香槟一瓶,在那位年轻人账上记下5000美元欠款。巴格说索价合理。
“2月15日:私了斯纳普先生一案。入日记账金额:50美分(参见账目)。
“2月16日:格拉夫一案败诉,那条恶棍给了我5美元。支付诉讼费4.25美元。纯利润(参见日记账)75美分。”

争取到挨打的机会,首要的是不要脸式的欠揍。“我”为能在短时间内取得1.25美元的净收入而感到振奋(虽然与预期之间有莫大的落差),不过毕竟身体吃不消,“我”又换了另一份生意。

大家应该能感受到,“我”的这种挨打行径在当今社会与碰瓷有异曲同工之“妙”。
甚至网络上多有“你碰我一下,我即刻去提新车”的调侃措辞,足以见当今社会黄冈沦丧之剧。

“我”的第三份生意是“溅泥浆”。这份工作非常有意思,但是“我”仍然认为这是一份严肃且需要条理的生意。只需要在路口的泥坑旁,扫出一条干净的道路,穿着干净裤子的人们都会抛给“我”一个个铜子,当作过路费。

这让我想起了看过的一些非洲人的视频,黑人收一些小费,在土坑之上搭建木板来让顾客的摩托车经过,或者一些孩童收费来帮助破烂不堪的汽车驶过村边泥泞的道路,他们肯定不希望路被修好。

但是“我”开始不满足于这样的正经营生,于是将生意发展为“狗溅泥浆”业。具体做法是与一只浑身沾满泥浆的小狗合作,只要遇到衣着光鲜的人,就上前去蹭一蹭,惹得人家破口大骂。而“我”,自然就坐在旁边支起了一个擦鞋摊,只需要一分钟就能赚到6美分。

但这并非一本万利的生意,因为这只小狗太能吃了,赚到的钱的一半都要分给它,导致“我”和它最终也决裂,甚至“吵了一架”。

这一段故事很有意思,而且更加典型地影射了现如今的一些不良现象,比如近年来听说有的修车店为了争取更多的补胎生意,故意在道路上遗撒钉子。有一部韩国电影讲述了同样的故事。

和小狗分道扬镳之后,“我”又开始做“街头演奏手摇风琴”的生意。这可不是一门艺术,它不需要任何技艺,只需要用榔头敲击手风琴几下,让它发出嘎吱嘎吱的噪音即可。

接下来,“我”只要沿街行走,在必要的位置停下来,摇响手风琴,就会有人打开窗户,一边抛下6美分,一边骂道“让那玩意儿住声,赶快滚开”。而我考虑到成本的问题,10美分才能“滚”。

这和如今的一些职业乞丐有什么区别?一些乞讨人员堵住商铺、甚至婚车,不给钱就不走,实在可恶。
我小的时候,每逢过年,总会有人挨家挨户送财神爷,不买的话,大有赖着不走的意思,一般5毛钱他们就能血赚,而不谙世事的我,有一次愚蠢到给了5块钱。

由于街道太过泥泞,以及霸道的居民、讨厌的孩童等客观因素,这一份工作“我”也没坚持下来。几个月后,“我”又找到了“假邮政”业务。

这个套路足以让人眼前一亮。具体做法是,“我”准备好假的邮包,假的信件,上面盖上假的邮戳,寄信人是(杜撰的)汤姆·多布森或博比·汤普金斯,然后冒充邮递员去送信。那个时候可能需要收件人付邮资(即“到付”),收信人打开一看,是毫无意义的涂鸦,才发现自己上当了。不过这时候“我”早就转过了街角跑掉了。

由于这个行业需要走路足够快(否则可能又要变成“挨打”的生意),并且还需要频繁更换工作区域(毕竟人们不容易二次受骗),再加上全城人对汤姆·多布森或博比·汤普金斯的骂声不绝于耳让“我”心怀不安,“我”又金盆洗手了。

当今,假快递已不是什么罕见的事情了。商家有时候需要假快递来刷单,但更多的,是以快递为幌子行欺诈之事。比如免费送东西,但需要你付邮费,人家赚的就是邮费,还有盲盒之类的。
这种事情并非无良小商家才做得出来,有体量的大型电商中,这也是典型的套路。比如一个蓝牙耳机,让你幸运地抽奖抽中了,但需要你花费20元邮费快递到家,其实耳机加上邮费可能仅价值10元。

虽然以上数种生意都没能坚持长久,不过功夫不负有心人,“我”还是找到了人生的终极生意,即“养猫”。

美国政府通过了《禁猫法》,鼓励猎杀猫,上交猫头可换取4美分,后来改成猫尾。于是“我”用全部积蓄购买了公猫和母猫,繁殖小猫,然后剪断猫尾巴上交,不断获利,甚至最后都能买下一幢别墅。

有人说这是在讽刺政府的愚蠢,我觉得倒不如在讽刺人心险恶。利用政策的漏洞古往今来比比皆是。不往远了说,近年来中国政府为了发展新能源产业,拨付了大量的补贴资金。
而这些资金真的用在了刀刃上了吗?在补贴取消前的那些年,看看市场上的新能源汽车是怎样的设计和质量?还有多少车被生产出来从来没有卖出去?

总结

爱伦·坡的这篇精彩的短文,告诉我们,时代虽然在发展,技术虽然在变革,环境虽然在改善,但是人这种复杂动物却不见得改变了多少。潜藏在人内心当中的狡诈、无耻、慵懒、自大,不会消失,只会以新的形式表现出来。

《生意人》是爱伦·坡为数不多的(甚至可以说是唯一的)轻松诙谐、易于理解的作品。建议大家有时间读一读,我阅读的是来自于江西人民出版社出版的,曹明伦翻译的《乌鸦:爱伦·坡短篇小说精选》一书。

(文中大部分图片采用AI生成)

北京延庆,亲戚家在2017年养了一只公的金毛犬,取名“拿铁”。和大多数金毛一样,拿铁性情活泼又温和,而且认人特别快。我们一年里很久能去一次,它就已经把我们全记住了,不再汪汪叫。


2017年

这是2017年10月4日的照片,当时它还是一只半大狗,推测不超过一岁,大概率也出生在2017年,这一年的7月底,我家小孩出生。

这是2017年12月9日的照片,平时它就待在笼子里,每天固定时间放出来溜一溜。

作为一条狗,它的伙食倒是很让人震惊,亲戚家常常特意蒸馒头来喂给它。

2018年

这是2018年3月27日的照片,不得不说,拿铁在金毛中的长相并不优秀,和网上看到的金毛长得不太一样。

这是2018年9月8日的视频,我牵着绳子遛它:

2019年

这是2019年3月3日的视频,我继续牵着绳子遛它:

这是它在标记领地:

这是2019年10月5日国庆节假期,依然在笼子里:

2020年

转眼到了劳动节,这是2020年5月3日。由于疫情的原因,我从春节后就一直在家办公,直到劳动节假期后。

2022年

2021年全年没有拍拿铁的照片,可能去延庆的次数也非常有限。

2022年1月1日,元旦:

2023年

2023年9月29日,提前来延庆过十一假期(怎么拍得这么丑):

2024年

2023年2月11日大年初二,春节串门,傍晚时分风停了,带着孩子出去遛弯:

这是2月13日大年初四,在喂它吃香肠:

这个时候,拿铁已经生病了很长时间,明显感觉到它不那么欢实,每日只坐在大门前,或者躺在门前的马路上,需要过往的汽车鸣笛,才会慢吞吞地起身。

即便不生病,拿铁也不是那种惹是生非的狗,遛它已经不需要牵绳,它会乖乖听人的话。在街道上遇到了一众小狗的挑衅,即便拿铁在身型上有压倒性的优势,它也不会主动攻击,而是尽量避其锋芒,算是胆小的体现吗,我不知道。

有时候觉得拿铁是一只傻狗,但有时表现得也比较有心机,比如我从家门口出去遛弯儿,它知道你出去溜达,于是会慢慢地跟着。但是表现得漫不经心,总是和你保持一定的距离,不用盯着你,也知道你在哪边,你走远了,它也会小跑跟上来。

这是在冰面上打滚,它会看着我的走向,来决定是否从冰面上上来:

我尽量顺着它的意愿路线来走,除非遇到其它不好惹的小狗,我没有绳子,担心强行通过那条路不好控制,而拿铁也知趣得跟我掉头。有时我停下,它也会趴在地上,啃着雪吃。我感叹动物竟然能吃脏雪不闹肚子,忽然又想到那个理论,动物虽然可以吃喝不卫生,但是它们大多数寿命都很短

直到我上车要回家那一刻,它还以为我要出去溜达,又跟了上来,我喊道:“快回家,bye-bye!”。


昨日(2024年2月18日)晚上忽然得知,即便送拿铁去过兽医院,它仍然病重不治,活了大概有7岁吧。

本文整理自“莺见”微信公众号:


不久前,因为一个短视频的原因,忽然对江户川乱步的这篇《人间椅子》有很大的兴趣,便从网上买了一本来阅读。

看完过后的感受是果然现在的短视频平台都是标题党,这篇小说肯定没有吓死人那么夸张,但由于我买的这本新星出版社的书是一本小说集(这是必然的,毕竟《人间椅子》只是一篇短篇小说),我有机会阅读到了更多江户川乱步的作品,进而接触到了日本推理小说的早期形式,特别是本格推理。

这本书的目录如下:

  1. 《人间椅子》
  2. 《接吻》
  3. 《跳舞的一寸法师》
  4. 《毒草》
  5. 《蒙面的舞者》
  6. 《飞灰四起》
  7. 《火星运河》
  8. 《花押字》
  9. 《阿势登场》
  10. 《非人之恋》
  11. 《镜地狱》
  12. 《旋转木马》
  13. 《烟虫》
  14. 《带着贴画旅行的人》
  15. 《目罗博士不可思议的犯罪》

这些作品各有特色,大部分带有悬疑元素,但并非都有让读者意外的结局。甚至其中一部分还带有开放性的结尾,引人深思,读完仍能回味无穷。

故事梗概

人间椅子

《人间椅子》确实是一个不错的故事,反转设计得很惊艳,而且是两次反转。可惜的是,作为今天被各种悬疑电影、短视频信息污染的我,在阅读的中途就猜出来后续的故事走向。

为什么我能猜到有人藏在椅子当中呢?第一是我可能把小说名记成了“人体椅子”,第二是看过一部来自国外的叫做《stuck》的短视频,讲的是一个男人藏在体操垫子里偷窥女运动员的故事。

但我应该还看过和《人间椅子》剧情更接近的故事但细节已经想不起来了。总之,各种因素的影响之下,这篇小说对于我的惊奇程度并不高,但是我相信在 100 年前的那个时代,读者一定有非常不一样的感受。

值得一提的是,椅子中藏人这种桥段,在乱步的多部作品中都有使用,比如《黑蜥蜴》就不下一处。

除了带有一些惊悚和悬疑元素之外,我们还能看到《人间椅子》中的主人公,即制作这把椅子的工匠,虽然拥有了一份能自食其力的工作,但毕竟人生受困于经济条件和阶层,对有钱人的生活充满好奇以至于最终走上偷窥这条路的心理,多少带有一定的变态。

这种变态是小人物的无奈,是不同阶层的矛盾。在现今的小说和影视剧中,有许多这种情节,让人看着既心酸又可气。越处于社会下层的读者越会觉得感同身受:“凭什么他们那么有钱人,而我只能每日辛辛苦苦工作才能勉强吃饱饭”,“如果有机会,我不惜冒险也要去获取富人的财物!”。而社会上层的人对此类小人物必然是嗤之以鼻的,“你算什么东西,敢觊觎我的财物和生活环境”。

这种矛盾是必然的,社会的分层在目前的人类社会发展阶段是无法短时间内消除,贫富的加大虽然有一定的客观因素,但是却容易被放大到完全忽视个人的主观条件,引起一些人在心理上的扭曲。

回到《人间椅子》这部作品本身,乱步在最后给出了两级反转,工匠先说他就是那个窥视女主人的藏在椅子里的人,而后又说他这只是一部他自己的文学创作。孰真孰假?显然,这是不可能在真实世界上发生的,只不过留给读者一个回味的元素。在故事里同时也让女主人真假难辨,即便只是工匠的一部文学创作,想必她也会把那个椅子扔出家门吧。

接吻

这一部小说的绝大部分篇幅都是从男主人公山名宗三的角度描述他的心理活动。故事以他在偶然间的一次下班回家后发现妻子阿花捧着一幅照片亲吻开头,他发现那幅照片是他的上司,同时也是阿花远方亲戚的村山。因此,新婚后本来是“乐得手足舞蹈”的他越想越气,最后甚至直接向上司村山发火,怒而离职,回到家和妻子摊牌。

妻子知道事情缘由之后恍然大悟,立即解释了这一切,原来是宗三看到阿花亲吻照片的时候,碰巧是通过一面镜子看到的,导致他后来去寻找照片的时候,翻错了抽屉,看到了村山的照片。事实上,阿花是在另一个抽屉面前亲吻的是宗三本人的照片。由于这一次的误会,使得宗三丢掉了公务员的职务,对家庭的经济造成了无可挽回的影响。

这是一部典型的解谜故事,最后的解释也算逻辑通顺,因此我觉得可以算是本格派的作品。但是《接吻》的一大亮点在于,乱步在揭示谜底之后,竟然“打破第四面墙”,有一段和读者直接对话的文字。

这段文字在今天看来自然有一些争议的描述,比如:

“反倒是女人表面上好像傻得一问三不知,心底里其实都盘踞着天生的狡诈”。

不过这并不重要,重要的是乱步给出了这个故事的另一个可能的真相,这种开放的结局在乱步的作品中多次用到(比如《盗难》中给出了不止两种)。如果有画面的话,只需要阿花嘴角的一次邪笑,就能让人无限联想,这在现代的悬疑类型的影视作品中几乎是标配的元素,为下一部的故事埋下伏笔。

跳舞的一寸法师

这部小说讲述的是一个“逼人太甚”的恐怖故事。一寸法师是马戏团里的侏儒角色,在下班之余总会受到团内其他成员的无情戏弄,苦不堪言。

在一次戏弄过后,大家起哄让一寸法师表现节目,他就和踩球美女阿花(话说阿花真是乱步的一个常用人名,就如同希区柯克的玛丽一样)一起表现斩首魔术。

斩首魔术自然就是将美女置于箱中,将几把大刀插入箱内,营造出一种必然插入箱中美女身体的假象,而后甚至将美女头体分离。

不过一寸法师借着酒劲,假戏真做,真的将阿花杀死,并将其斩首。当阿花被刀刺发出尖叫时,周围的人还以为她在表演,而无任何察觉。

显然,一寸法师长期受到同事的压迫戏弄,忍无可忍,才做出了如此行径。我们虽然不能赞成其做法,但必然能深深理解其心理上的痛楚。

单纯作为一篇悬疑反转作品来看,此类意外并不少见,我在阅读到一寸法师用刀刺阿花的情节时,就已经能猜测到了结局,少了不少乐趣,不过这是由于我先入为主地以悬疑小说的角度来阅读所造成的,这种阅读心理,在遇到有推动情节的关键行为时,就会基于经验来极力搜索所有可能性。

毒草

这是一篇只有五千字的短文,情节倒是很紧凑,讲述的仍然是关于底层苦难人物的故事。

“我”与友人在野外散步遇到一株具有堕胎功效的草药,不经意将其用法讲了出来,未料到被身后不远处的一个女人听见。

这个女人是“我”的邻居——邮差家的妻子。邮差50多岁,收入十分微薄,却顿顿要喝酒,最重要的是家中还有6个孩子,有的还有病。这一切都压得女人喘不过气来,而她现在又有了身孕。

毫无意外地,草药能堕胎的消息不胫而走,不仅邮差妻流产了,连带着的还有另外两家女人。因此可以说,那一天“我”和友人的谈话间接导致了3条生命的流逝,那一株草药也被薅“秃”了。

我们在这里要看到的是底层人物的不幸,至于“我”的行为是对是错,难以分辨,虽然对3条无辜生命是不公的,但对家庭来说,未尝是坏事。

不景气的经济是乱步作品中很多故事、很多小人物的背景,这也是乱步早期作品的写作时局,当时正值一战之后,东京遭遇大地震,又逢经济危机,造成很多人陷入失业窘境。我们将在后面的作品中看到更多同一时期的故事。

蒙面的舞者

这是一篇十分荒唐的故事,主要元素仍然是悬疑小说中常用的误解、巧合。

“我”被邀请参加一个非常私密的俱乐部,该俱乐部面向上流阶层来定期组织刺激性的活动,会员17人,轻易不扩充会员。只有一名会员退出的时候,才会邀请新成员加入。

这一天,会长来“我”家做客,邀请“我”参加他组织的一项俱乐部新活动,即蒙面舞会。17位会员,外加17位不知名的女士一同参与。

容易让人想歪,虽然剧情还没如此不堪,但也称得上是恶作剧了。在舞会上,34人组成17对男女,在舞池中跳舞。等到活动结束,“我”烂醉如泥,摘下了面罩,却吓得女方落荒而逃,留下一封信,“我”第二天才看到。

原来女方是另一名会员井上次郎的妻子!“我”开始怪罪会长竟然安排如此污秽不堪的活动,但后来会长的说辞是——每对男女其实是夫妻而已:

“以为是宝箱,打开一看,竟是旧货。”

但“我”显然搞错了,竟然和井上次郎互换了女伴而不自知,全都是因为“我”看错了号码,把7看成1,导致了如此荒诞的结果。

在无聊生活中寻求刺激,这种元素在乱步作品中多次出现,大部分自然是有钱人,穷人都在为生活奔波,哪有时间无聊呢。印象最深的当属《红色房间》,这是一个更离奇的故事,后面再聊。

飞灰四起

《飞灰四起》讲述了一个杀人犯自以为是的故事。庄太郎是一名画家,与奥村一郎是情敌,但却要靠后者接济生活。在一次“借”钱不成之后,庄太郎拿起手枪杀死了奥村一郎,然后逃走。

庄太郎害怕杀人的事实被发现,因而想出来一个嫁祸他人的主意。他找到奥村一郎的弟弟奥村二郎,并从奥村一郎房间的火盆中找到一个脏兮兮的球。他引导奥村二郎认为是自己打球时,球飞入二楼的屋子中,刚好击中奥村一郎拿着枪的手,引起走火,而后飞入地上的火盆灰之中。庄太郎希望奥村二郎将这样的推论告诉警察,从而给案件定下意外的结论,他就能逃过一劫。

没想到很快奥村二郎却带着警察找到并逮捕了庄太郎,原来奥村二郎反应了过来,那个火盆是他和庄太郎谈话当天才搬进来的,怎么会装有奥村一郎被杀当天的球呢?而且,警察找到了卖给庄太郎球的商店老板,庄太郎买到球之后做旧,故意放在了火盆之中。

在间接证据之下,庄太郎认了罪。原来这只不过是他的一场拙劣的推理表演。

这个故事带有显著的逻辑推理元素,不过和一般的在开始把疑点抛给读者的故事不同,《飞灰四起》在开始就把真相叙述了出来,并和读者一起构造出了不存在的真相,最后再迅速推翻它。

我觉得故事中反而对人物的刻画倒是很逼真,比如庄太郎杀人后瘫痪式的体态表现和断片式的思维,真实地表现出一名普通人在如此遭遇后的反应。

如果要挑刺儿的话,一名落魄的画家,哪里来的能力在短时间内构造一个逻辑推理的故事呢?当然,结果也反映了他的“不专业”。

火星运河

这部讲述的是一个男人的奇怪梦境,倾向于抒情,词藻比较华丽,但基本不属于推理悬疑范围,不做评论。

花押字

这又是一篇带有浓重误解、巧合元素的故事,两级反转,还算是比较有意思,结局令人唏嘘。

老门卫栗原一造讲述他一段年轻时的故事。在30岁左右的时候,因为失业(“不管干哪一行,都撑不了一年”,简直是乱步在描述自己,同样背景在经济不景气时期),整天在公园的长椅上久坐。

这一日,他在公园邂逅了来东京找工作的田中三良。田中认为自己见过栗原,二人相互述说了自己的过往经历,发现并没有重合。几日后,栗原造访田中,田中想起了为何他觉得见过栗原。

原来,田中有一个他姐姐北川澄子过世后留下的盒子,里面的随身镜后面藏着一张照片,照片里正是学生时代的栗原一造。田中常常拿出照片,怀念姐姐,所以误以为认识栗原。

因此,一个可能的事实上,北川澄子曾经倾心于栗原一造,但栗原原本认为北川过于高冷,不容易接近,最后娶了北川的同学阿园。北川可能因而抑郁而死。

得知此事,栗原一造自然感到造物弄人,他和田中要到了哪个盒子和随身镜,常常睹物思人,甚至想去北川的墓碑前,无奈路费不足。

谁知,这一天,这件遗物被妻子阿园发现了,不想从她口中得知了一个令人震惊的事实。原来这个盒子原本就属于阿园的,甚至她在上面刻下了有她和栗原名字首字母的押字,但是在一次修学旅行中丢失了。

这样看来,阿园和北川具有同样首字母造成了一些误解,甚至栗原倾慕的北川还可能是个小偷!

多么可笑的故事啊,利用死者遗物造成误解的故事,乱步还有其它作品,比如《戒指》。从真相上来看,是不是栗原要对妻子阿园更好一点才对啊,毕竟她在十几年前学生时代就倾心于栗原,否则也不会把他们俩的名字刻在盒子里。

阿势登场

这是一个类似《水浒传》中武大郎的故事。格太郎是个时日无多的病人,妻子阿势常常出门与姘头鬼混。但是格太郎为了孩子,仍然与其维持表面上的和平。

这一天,阿势打扮停当,又出门去了。格太郎吃过饭,儿子正一带着小伙伴来家里玩。格太郎给孩子们讲了几则故事之后,便和他们玩起了捉迷藏。

格太郎将自己藏在了母亲出嫁时的旧大衣箱中,结果孩子们没能找到他,都出去了。等到他自己想出来时,才发现刚巧不巧,箱子的金属扣子意外锁住了!

格太郎呼喊,但是没人听得见他。他想挣脱,但是箱子很结实,他又患病,根本没有力气,只能疯狂抓挠。慢慢地,箱子里的空气开始耗尽。

刚好,阿势回来了,她隐约听见了格太郎的动静,刚将锁扣打开要把箱子盖揭起,忽然冒出了一个恶毒的念头。

她又迅速将盖子压紧,扣上锁扣,并离开房间,任凭格太郎癫狂地抓挠呼喊。

最后,格太郎死亡,警察认定这是一场意外。等尸体搬走,阿势与格太郎的弟弟格二郎都看到了箱子里有格太郎的抓痕,隐约可辨认是“阿势”二字。

这里,乱步给出了两种解读,一种是格太郎死前还惦记着阿势,这也是格二郎所认为的。而我们知道,应该是第二种,其实是对阿势的控诉和诅咒。

阿势获得了不菲的遗产,将房子卖掉,带着儿子离开了。她也卖掉了那个旧大衣箱子——如此不祥之物。

最后,乱步引导读者进行了一次天马行空的设想,如果有人买下了那个大衣箱子,他会理解上面抓痕的意义吗?留在箱中的恶念,会给新主人带来什么呢?

我立刻就能想起看过的无数恐怖片,依据一个大衣箱这个旧物件,《阿势登场》刚好可以作为故事的前传。

这个故事的特殊之处显然在于“恶人”阿势没有最终得到惩罚,这里有一个发人深思的问题。作恶和不作为,前者真的比后者更严重吗?阿势听到丈夫的呼喊不去救,与救到半路又反悔,哪一个更为人所痛恨呢?

即便不去作恶,如果仅仅是作出看似无关痛痒的轻微合法行为,但是却引起了严重意外后果,这又和上述两种行为如何对比呢?

将来我们还是看看《红色房间》的恐怖假设吧。

非人之恋

这篇故事剧情比较简单。以一名女子(京子,即“我”)对10年前的回忆开头。

当年十九岁的“我”通过媒人介绍嫁给了世家望族的丈夫门野。在出嫁之家,就有传言说门野性情古怪,脾气不好,并且还厌恶女人。不过门野清秀帅气的外貌和忧郁的气质还是吸引了“我”。

婚礼之后,门野对“我”呵护有加,让“我”悬着的心多少落地了。但是这样美好的时光不过半年,“我”便发现了古怪。

先是丈夫的态度发生转变,不再像之前那样关切“我”。而后,“我”发现他常常在“我”睡熟之后,偷偷起床,奔屋后的土仓库二楼而去。

土仓库二楼本来只装了一切祖先的旧物,一开始“我”并没有在意,但随着丈夫一次又一次如此,甚至还刻意探查“我”是否睡熟的鼻息后才离开,更加让人对真相欲罢不能。

为了搞清楚,在一次丈夫出门后,“我”悄悄地跟了上去,在黑暗中爬上了土仓库二楼,在门外听到了可怕的动静。

屋内有男女交谈的声音,男声自然就是丈夫门野。这声音自然让“我”认定是丈夫金屋藏娇,顿感悲伤。等门野从屋里出来,“我”想继续等待,想看看到底是哪位女子,但却一直没有人从屋里出来。

三番两次的监听之后,女子再也坐不住了,她几次来到土仓库内部搜寻,想找到有其他女子存在的证据,但是翻来翻去,找到一具精致的人偶。难道丈夫每晚都在和这具人偶说话吗?那女声来自哪里?

人偶在日本民间具有不一样的意义,历史上存在许多相关的传说,比如照着某人形象扎的人偶,生死就会同步到其人身上,如同巫毒娃娃一样,在中国的很多宫廷故事中也有类似的记载。还存在一种职业,叫做人偶师,专门制作精良的逼真的人偶,也算是一种文化,在维基百科的词条“日本人形”可以查阅到更多信息。

一种日本人偶(图片来自维基百科)

不过《非人之恋》中的人偶,与其说拥有摄人心魄的神秘力量,倒不如说是门野迷恋人偶的奇异心理作祟。有这种心理的人物和故事有很多,乱步在《乱影城主》中就有他收集到的多个奇异故事。

说回故事,最后“我”一怒之下砸碎了这具人偶,等到丈夫发现时,悲痛欲绝,竟然选择自杀与之殉情,可见其迷恋人偶之深。

这种小说中的悬疑色彩并不浓烈,不过从阅读体验上来看,乱步描述“我”心理活动的文字能够一步一步引导读者读下去,比如以回忆作为故事开头的方式,为读者埋下了疑惑的种子。接下来,又以门野的传闻作为引子,将读者一步步带入故事情节中,逐步渲染出关键疑点(土仓库),最后突然揭开谜底。

无论怎样总结,都不如阅读原文的体验。我越来越觉得,即便对于重在叙事的悬疑小说,如果没有丰富词藻的陪衬,效果也会大打折扣,成为像希区柯克那样的流水账。

镜地狱

这一篇讲述的是一个离奇的故事,却没有多少悬疑成分在内。

故事讲述者(即“我”)的一位朋友,家境殷实,有着一种异于常人的爱好——镜子,包括各种透镜。他喜欢用望远镜观察远处的人,监视仆人的一举一动;也会用显微镜观察细小的如昆虫般的事物。

他迷恋镜子越来越深,就像打开了一扇通往异世界的大门。他消耗父母留下的遗产,在家中建立起一座实验室,整日忙于其中,其痴迷程度甚至开始影响他的健康。

他不断收集各种各样的镜子、透镜,以至于最后在家里搭建起一座玻璃工厂,以制造在市面上买不到的形状。

有一日,“我”忽然被叫去查看这位朋友的境况,似乎出了莫大的问题。到达他的实验室之后,发现里面有一个容人的玻璃球,里面发出了咯咯的疯狂笑声。急切之下,我“打破”了玻璃球,里面正是那位形同枯槁的朋友。

最后那位朋友不治而亡,至于他为何最终癫狂,不知为何,可能是他在这个球形镜子内部看到了什么可惧的事物。

这种带有发狂元素的故事,读起来有点像爱伦·坡。爱伦·坡善于刻画人的心理,特别是变态的心理,发狂并不罕见。乱步的作品相比之下更现实,少有对发狂人物的塑造。

不过对于镜子这种东西,乱步的作品中很常见,这源于他本人对镜子的痴迷,他在《幻影城主》中就说到过自己对镜子的无限遐想,包括星空宇宙,他还对美国新建设的巨大口径的望远镜表现得饶有兴致。

用望远镜窥视他人的行为,乱步在多部作品中有使用,比如接下来的《带着贴画旅行的人》,以及中篇小说《阴兽》。

值得一提的事,文中曾提到这位朋友用镜子将昆虫放大数百倍,让“我”心生恐惧,这段描写应该源于乱步对蜘蛛一类生物的天生惧怕心理。

旋转木马

格二郎是一位落魄的喇叭手,在游乐场的旋转木马上日复一日地吹奏相同的乐曲。他有一位“黄脸婆”妻子和三个孩子,大的12岁,小的才3岁,糟糕的经济状况和生活环境让他每日早早地离家赶去上班。

他上班的另一个、或者说是最重要的原因还是因为同样在旋转木马上工作的年轻售票女孩阿冬。阿冬18岁,和格二郎一样穷困,姿色一般,但是毕竟豆蔻年华,仍然具有一定的吸引力。

阿冬和格二郎住在同一个方向,每日下班后同路。渐渐地,比阿冬大一轮的格二郎对她产生了好感,如果哪一日阿冬没来上班,他会觉得工作很无聊,喇叭吹得都没有气力。

一日下班路上,阿冬对街道旁商店里的一条披肩产生了兴趣,非常渴求能买下它,不过毕竟经济上不允许,她每月赚的20多圆薪资不可能去买7圆多的披肩。格二郎想替阿冬买下披肩,不过他赚的也不多,而且家里还有歇斯底里的黄脸婆和三个儿女。

在一次工作中,格二郎看到阿冬卖票时,被一位鬼鬼祟祟的男青年偷偷地塞了一封信到她的裤袋中。他觉得一定是一封情书,不免心生醋意。经过了一番心理斗争之后,在下班时,还是偷偷地把那封信从阿冬身上顺了过来。

打开一看,那不是什么情书,竟然是藏有一百圆的某人的薪水袋。原来那位青年是个扒手,在被警察盯上之后,急忙之下将赃物藏在了完全不知情的阿冬身上,被格二郎误以为是在送情书。

现在,失主和扒手都不可能来取钱,即便来,格二郎也不会承认,而阿冬则完全不知道身上曾有一笔“巨款”,考验格二郎的时候到了,他该如何处理这些钱呢?

显然,这笔意外之财能让他有能力为阿冬买下那条披肩了,想到这不禁激动万分,甚至叫上游乐场的同事开启了一场无声的狂欢……

格二郎又是一位乱步笔下的生活在那段经济低迷社会环境下的小人物,虽然年纪已长,但是仍然不得不为了生活去做那不值一提的、按部就班的老工作。年轻的阿冬成为了他生活中的一道光,吸引着他不断逃离压抑的、“歇斯底里”的家庭。而旋转木马,是格二郎的工作,同时也影射着他日复一日不断重复的无奈生活。只有依赖一笔“幸运”的外财,才能让格二郎短暂地随意所欲一次。

烟虫

这是一篇带有反战色彩的故事,在二战期间一度被禁止出版,不过它写于九·一八事变之前的1929年。

在战场上身负重伤的须永中尉,由于失去全部四肢、听觉和声带,导致他只能以眼神和外界交流(描述具体形象的文字令人感到不适)。妻子时子因为数年来“无微不至”的照顾,成为了忠烈的典型。夫妻二人目前无偿借住在须永的老领导家的别馆里,得到了老领导的一定照顾。

在须永中尉刚刚负伤时,社会各界都对以报以热烈的嘉奖,让夫妻二人感受到了短暂的荣耀。不过时间一长,大家都全部忘记了,时至今日再也没人提起须永中尉的“英勇事迹”。只有老领导每每还穷尽溢美之辞赞扬须永中尉夫妻二人。

面对如此微薄的精神施舍,听得多了,时子也开始觉得刺耳。除了拜访老领导家以外,时子无处可去,丈夫不能说话也听不见,只能靠眼神和用嘴写字与其简单交流。不过须永中尉原本就是没读过多少书的粗人,残废后更加是只能整日发呆。

与向外表现的忠烈不尽相同,私下里,时子却把已成为了一团肉的须永中尉当作玩偶一般,表现出了对似人非人怪物的极近变态的蹂躏欲望。具体细节不方便多讲,乱步也没赤裸裸地描述,只能脑补。

终于在一次发泄之后,时子突然发现须永的双眼流血,赶紧找来医生,也只能简单包扎,连医生都被这团肉吓得够呛。

果然,须永的眼睛瞎了,除了触觉之外的唯一感官被剥夺了。试想一下一个人,不能自由行动(但还能扭动),看不见,听不见,说不了,几乎像有意识但却不能动的植物人一样,把灵魂封锁在了肉体内,是何等地残忍,简直就是受罪一般。

果然,等到时子将情况讲给老领导,并与其一起来看望须永中尉时,忽然发现他不见了,他竟然靠着像虫子一般的身体蠕动着下了楼梯,在草丛中爬行。虽然他眼睛看不到,每次也只能前进一寸,但是仍然在时子和老领导的目光中精准地找到了那一口枯井,毫无犹豫地栽了下去……

这篇故事描绘是战争给个人所带来的极度创伤,即便再多的荣誉,也不过是暂时的体面,余生必将留下无尽的痛苦。须永中尉是直接受害者,但是妻子时子不也是么。她对已成为怪物的丈夫虽然没有直接放弃,但是孤苦伶仃的生活也让她滋生出反常的扭曲心理。

带着贴画旅行的人

这是乱步口中“不知是现实还是梦境”类型作品中的一篇。乱步学生时代酷爱冥想,甚至在宿舍内将自己关在衣橱内发呆。在路上行走,如果有人跟他讲话,他都会觉得打扰了他的思考。

乱步对梦境着迷,或者是精神方面,他阅读弗洛伊德,创作出许多与梦境有关的似是而非的故事,其中包括梦游。可能正因为他偏爱沉浸于自己的思想世界,才自称《幻影城主》。也许这也是一个人能成为作家的必要特质吧。

故事讲的是在火车上偶遇到的一位老人的自述。“我”去鱼津看海市蜃楼回程路上,火车座位的斜对面,坐着一位打扮得体的似40岁又似60岁的男人,他随身携带着的一幅贴画引起了“我”的注意。

这位老人拿出了一个19世纪的古老望远镜让我观察这幅画,我意外拿反望远镜让老人十分惊慌。“我”观察后,对画中栩栩如生的人物感到十分震惊,乱步在这里不吝词藻地加以描述。

而后,老人讲述了这幅画的故事。少年时,他的哥哥虽然每日仍旧上班,但明显变得意志消沉,沉默寡言,家人都很担心他。明治28年(即1895年)4月的一天,老人(当时不满20岁)跟踪哥哥的去向,想知道他到底在干什么。

哥哥来到了东京浅草十二阶,拿着望远镜向下看。这时,弟弟叫住了哥哥,哥哥才道出了原委。

原来,某日哥哥向下用望远镜观察时,意外发现一位端庄美丽的女子,顿时患上相思病,每次前来只为能再一次一睹芳容,无奈事与愿违,摘下望远镜后便难觅其踪。

这次,哥哥似乎又看到了那位女子,急忙叫上弟弟奔向浅草寺寻找,但是找来找去却找不到,连那幢用作标记位置的房屋都没看到,二人不慎走散。

等到弟弟发现哥哥,他驻足在窥孔机关(应该是类似那种通过一个小洞观察内部玄机的生意)的小摊前面,上去查问,原来哥哥已发现那位美人实际上是一幅贴画中的人物“阿七”。

哥哥让弟弟倒置望远镜看他,弟弟看着看着,只见哥哥越来越小,最后似飘在空中不见了。最后, 他竟然发现哥哥已成为了贴画上的人物,与阿七左右相伴,也算随了他的愿。

火车上的老人看到“我”拿反了望远镜如此惊慌便是因为如此。故事没有完,阿七本来就是假人,因此青春常在,但是哥哥却容颜渐老,直到现在已白发苍苍。所以,“我”在火车上看到的,实际是一位妙龄女子和一位白发老人的贴画。哥哥因为自己年老,不甚哀伤,所以弟弟带着“他和阿七”一起坐火车旅行,欣赏沿途风景。故事线回到了火车上。

这篇故事中,望远镜仍然是乱步作品中惯用的经典道具,虽然他对镜子很上瘾,但是在小说中以弟弟的口吻却说这种东西会把小虫子放大成怪物,很可怖,算是呼应了《镜地狱》中的描述。在《幻影城主》中,乱步坦言和父亲一样,自小十分害怕蜘蛛这类生物,原因可能是埋着他胎盘的土地上方第一个爬过的生物就是蜘蛛(一种市井传说)。

哥哥隐入贴画中与女子为伴的故事虽然在现实中不可能发生,但未尝不是一个引入瞎想的浪漫故事,我隐约记得之前也读过类似的,但一时想不起来。

目罗博士不可思议的犯罪

这篇故事的一个特殊之处是以江户川乱步自己的身份作为第一人称的,讲述的是关于模仿和月光的恐怖杀人故事。

这一日,乱步出门闲逛,寻找写作灵感,在东京一处动物园的猴笼前邂逅了一位衣着破旧、精神头却很好的年轻人。

年轻人向乱步感叹猿猴和人一样,都是模仿的动物,先讲了一则小故事作为佐证。说一人的短刀被猴子夺去,他使出一招便成功拿回。怎么做的呢?他捡起一根树棍,在自己脖子上划来划去,那只猴子由于模仿的天性使然,也拿着短刀在自己脖子上划来划去,以至于血流如注,当场毙命。

猿猴如此,相似的人类也有类似宿命。年轻人又讲述了一个自己亲身经历(案件的当事人)的故事。

他之前在东京某处作为安保人员,看管两幢长得几乎一模一样的大楼,就好像是镜面倒影一般(乱步又提及了关于镜子的恐怖之处)。特别是在月光之下,这两幢钢筋水泥建筑看起来更加阴森。

接下来,位于五楼的某个用于办公的出租房间内,在短时间内发生了三起命案,每次无不是租客在房间外挂电线的横木上上吊自杀,诡异至极,但却无迹可寻,警察只能当作悬案处理。

不过当时作为安保人员的年轻人并不这样认为。因为他在最后一次命案当场,月光之下,看到了对面楼房开着的窗户中一闪而过一张蜡黄的人脸。

多日之后,年轻人发现了秘密,大楼附近开眼科诊所的目罗博士,和那日在对面房间看到的脸长得一模一样,他认为其中一定有不可告人的秘密,以后便随时留意目罗博士的动向。

半年后,那间房间再次出租,年轻人终于观察到了目罗博士的反常行为。他看到目罗博士买下了一套与新租户相似的衣服,套在了一尊蜡像身上,将蜡像打扮的和租户几乎一模一样。于是,年轻人大致猜到了是什么回事。这一晚,月光皎洁。

入夜,等到租户离开,年轻人便穿上与其类似的着装,用备用钥匙潜入了那间房间,背对着窗户伏案等待。果然,半夜时分,听到窗外猫头鹰的一声怪叫,他知道这是吸引他看向窗外的暗号。

他回过头来,打开窗户,一眼就能看到了和这边一摸一样的对面大楼,几乎如镜中倒影一般。唯一不同的是,对面没有我自己的身影。不对,有我,不过是吊在一根细绳之上——没错,就是那尊蜡像。在朦胧月光的诡异氛围之下,如果换做一般人,肯定就鬼使神差地模仿对面的景象,自己上吊去了。

但是年轻人有备而来,他知道这是目罗博士的诡计。于是他也拿出了预先准备好的道具——一尊和目罗博士一模一样的蜡像。他把蜡像搬上窗台,对面的目罗博士受到氛围的感染,竟也坐上了窗台。而后年轻人一把将蜡像推下,目罗博士也跳下了楼。不过年轻人事先已经在蜡像上绑上了绳子,又将蜡像拉回了房间……

这篇故事和前面的猴子拿刀的故事都描述了关于模仿的离奇之处,只不过一个是猿猴,一个是人类。沐浴在月光之下,显得寂静而诡秘。

之所以称之为不可思议的犯罪,显然,目罗博士对之前的三名租客,或者是年轻人对目罗博士,充其量不过是起了一个引诱的作用,并没有直接的作案动机和接触式的谋杀行为。个中责任如何定论呢,发人深省。

总结

这本书的15篇故事就简介至此了。总体来说,还是要感叹乱步丰富的想象力。单纯以犯罪推理的角度看,其实这些故事大多没有特别曲折的情节,只是简单离奇故事的氛围化表述,在结尾处能带来一定的反转,和本格不本格关系并不大。这些故事涉及方方面面,不拘泥于家庭、职场,使得乱步的作品具有可贵的多样化特征,吸引着各类读者。

乱步的作品带有浓烈的个人色彩,比如前面提到的镜子、虫子、土仓库,另外还有他写作时期(20世纪20年代)的大环境时局体现。如果没有丰富的切身经历,文字不可能细腻到让读者带有如此画面感的体验。

我近期同时在看乱步的《幻影城主》,他在年轻时曾经阅读过大量文学作品,他的母亲、祖母甚至可称为其在推理文学上的启蒙者。相比这段阅读时光,对他的日后创作起到了相当大的作用。

100年后的今日,充斥着各种各样的信息输入,手机、短视频无时不刻不占据着一个人的时间,可悲还有几家人能培养其这样的阅读环境。

再者,如今丰富的悬疑影视作品,多种多样的悬疑剧情,让大多人先入为主地对一些常见伎俩有了预测能力。反过来阅读乱步的作品,必然没有特别震撼的感受。要知道,在100年以前,此类故事并不多见,就如今的人首次观看3D电影一样,都是新玩意儿,因此,纯粹地以今天的视角去审视乱步的作品是不合适的。

毫无争议地说,一个世纪之前,在推理文学启蒙的那个时期,必然会出现一位破局者,他一定是江户川乱步吗?不然,但是,乱步对此却做好了准备,真可谓时势造英雄,英雄亦适时耶

(文中大部分图片采用AI生成)

本文整理自“莺见”微信公众号:


最近一个多月,机缘巧合地读了几本江户川乱步的侦探小说,得知包括柯南·道尔在内的这些推理作家,都或多或少地受到了美国作家爱伦·坡的影响。带着好奇的心情,从网上花了9块钱淘了一本《爱伦·坡短篇小说集》。

这一本252页的书包含了11篇小故事:

  1. 《红死魔的假面具》
  2. 《厄舍府的倒塌》
  3. 《一桶蒙特亚白葡萄酒》
  4. 《泄密的心》
  5. 《威廉·威尔逊》
  6. 《黑猫》
  7. 《莫格街凶杀案》
  8. 《失窃的信》
  9. 《金甲虫》
  10. 《瓶中手稿》
  11. 《乌鸦》

我阅读过后的感受,怎么说呢,非常困惑,从两个方面来讲。

文字晦涩,环境和心理刻画篇幅过多

首先是感觉文字表述的方式非常不符合中国人的口味,过于啰嗦,典型的“翻译腔”。当然,中国人对于这种来自欧美的文学有这样的感受是很正常的,记得中学时候读福尔摩斯也是如此。

不过爱伦·坡作品的这种感受更强烈一些,除了不同语言带来的表述鸿沟之外,还要“怪罪”于他对环境氛围心理活动的刻画实在过于细节,最终表现就是用了相当大的篇幅来做铺垫。最典型的莫过于《威廉·威尔逊》,在开始正式叙事之前竟然用了7页的内容做人物、心理和环境介绍,故事还未开始,恐怕心急的读者已经不耐烦了。

这对于先入为主地以侦探、推理小说的预期来阅读的我就会感到非常困惑,特别是在有噪音干扰的环境中,很难有心思能揣摩作者要表达的意境。这种困惑在几乎所有11篇故事中都有体现。

来看《红死魔的假面具》对室内环境氛围的一段表述:

“这里的玻璃窗是暗红色的——深暗的血液的颜色。这七间屋子里,没有一盏灯,也没有烛台,只有耀目的金器散布在各处,或者从天花板上垂吊下来。但在围绕着的回廊上,每一扇窗户对面都摆放着一只沉重的三角支架,三角支架上都放着一盆火,火光透过彩色玻璃,把房间照得通亮,于是就产生了大量奇形怪状、魑魅魍魉似的景象”

有没有惊悚的感觉?再来看《泄密的心》中对心理活动的一段表述:

“那个念头是如何钻进我的脑子的呢?现在已经很难说清这个问题了。可是,自从它钻入我的脑子,就日夜萦绕着我。那位老人对我十分友善,它一直以公允的态度对待我,也从未侮辱过我。对于他,我心存爱意,从没想过利用他,也没想过要伤害他,更不想得到他的钱财,”

是不是够婆婆妈妈?带着这种困惑我去查阅了爱伦·坡本人的经历以及身后评价,原来他的作品有两个特点:哥特风与心理刻画

哥特风

哥特(Goths)原本是古代欧洲的一支民族,逐渐发展成了野蛮的代名词,与惊悚、恐怖、阴暗联系在了一起,在建筑等多种领域都有体现。文学上的哥特式必然要用一些文字来做阴森的氛围渲染。我想中国人对于哥特文化最熟悉的莫过于吸血鬼了,一些经典的吸血鬼影视作品,比如《黑夜传说》,画面格调一直都是灰暗的,故事的场景也是下水道、城堡等场景。

哥特的恐怖元素对于中国人来说,应该还是相对陌生的。我会觉得它确实很惊悚,但是仅仅是视觉上的,还远远达到不了直击心灵的效果。它表现出的恐怖往往是活人的无耻、粗鲁、暴力、阴郁、变态所带来的。而东亚文化中更恐怖的恐怕应该是像《山村老尸》、《咒怨》、《连体阴》等死人带来的复仇。后者则更能反映因果论,前者更现实,在因果关系上的表现则更需要发狂的活人来表达。

在我读的这一本书中,《红死魔的假面具》、《一桶蒙特亚白葡萄酒》、《厄舍府的倒塌》、《泄密的心》、《威廉·威尔逊》应该都是哥特元素足够丰富的恐怖小说。

《红死魔的假面具》讲了一个这样一个故事,在传染性的红死病流行期间,一位富人在庄园中大肆组织狂欢会,结果被“红死魔”团灭。故事非常简单,大量篇幅都在描述环境,比如每一间房子的奇幻装修风格,以及疯狂的聚会者如何作乐。对于“红死魔”,爱伦·坡用僵尸来描述他的肤色。这样一个猎奇的、恐怖的的场景就出现在我们面前。至于最后故事的戛然而止,作为叙事故事肯定是让人失望的,但要记住,这仅仅就是一部恐怖小说。

《红死魔的假面具》插画,作者:Harry Clarke

《一桶蒙特亚白葡萄酒》简单来说就是一个人把他的“仇人”骗到地窖中困其致死的故事。显然,故事情节并不复杂,也不是重点,重点是爱伦·坡在篇幅中用大量的文字来描述了两方面内容:一是阴森的地窖环境,二是主人公的心理变化。中国人应该很难想象在自家房子的地下埋藏着先人遗骸这件事,不过西方应该并不陌生,英国王室成员就是集体埋葬在一座大教堂下面的。

《一桶蒙特亚白葡萄酒》插画,作者:Harry Clarke

类似的情节在本书的《厄舍府的倒塌》一篇也有。它讲的故事是在阴暗的城堡内,主人公和城堡主人将其妹妹活埋的故事,城堡主人的阴郁给人留下了深刻印象。

《厄舍府的倒塌》插画,作者:Harry Clarke

回到《一桶蒙特亚白葡萄酒》,爱伦·坡描述整个地窖的墙壁镶嵌着许多人类的遗骸,两位角色提着灯在里面走了很远,想想就足够惊悚。主人公一边骗对方喝酒,一边向前走,同时描述着主人公心理的所思所想,直到最后他疯狂地用砌墙的方式将对方封死在地窖内。网上看到一篇论文对此的描述是主人公借着复仇的名义发泄着自己的罪恶意念。从这里可以看到,爱伦·坡在恐怖小说中对人物心理的刻画是十分丰满的。

心理刻画

事实上,这些小说中爱伦·坡对心理活动的描写所用的篇幅要远比对环境氛围的描写所用篇幅更大。

《黑猫》、《泄密的心》、《威廉·威尔逊》等都具有非常类似的、鲜明的心理刻画特征,甚至主人公开始表现出癫狂和多重人格的特质。

《黑猫》以第一人称的方式来讲述了主人公病态的心理变化。黑猫原本是主人公的一只温顺的宠物,主人公却因为心理的莫名变化,挖走了它的一只眼睛,最后把它给吊死了。主人公家里火灾过后,黑猫吊死的印记出现在了墙上,描绘出了一幅回魂复仇的画面。而后主人公又收养了一只来历不明的黑猫,却在第二天也丢失了一只眼睛,这给故事增加了相当大的魔幻氛围。最后主人公因为又想杀死这只猫,却失手杀死了妻子,为了避免东窗事发,他只好把尸体藏在了墙里面,在警察盘问时还能做到镇定自如。谁知那只黑猫也被意外地藏在了墙里面,它的叫声暴露了一切。

《黑猫》插画,作者:Harry Clarke

《泄密的心》表现出的人物心理则更具不可理解。一位老人本没有任何过错,对待主人公也很好,仅仅是因为主人公不喜欢他的眼睛,就在深夜谋害了他,并把他藏在了屋子的地板下。结果等警察来询问时,主人公却发疯似的不打自招。读到这里可能会有莫名其妙的感受,但这正反应了人物扭曲、变态的心理。如果说需要一种熟悉的解释的话,那可能就是作恶终归过不了自己那一关。

《泄密的心》插画,作者:Harry Clarke

《威廉·威尔逊》更上一层楼,讲来讲去甚至就只有主人公一位人物,他的所谓这位同名同姓同日生的同学,实际上就是他自己,不用读到最后就能猜得到。故事表达了这位主人公极具分裂的多重人格,杀死对方的同时,也将自己杀死。

《威廉·威尔逊》插画,作者:Harry Clarke

如此复杂狂乱的心境描写,可能是爱伦·坡本人经历的影射。他自小没有父母陪伴,长大后又因玩忽职守被军队开除,后来妻子感染肺结核死去,他酗酒,在创作道路上的努力也都没有结果,这一些经历恐怕对于任何人都是一种恐怖的压抑。他会有挫败感吗?我们不得而知,有才是正常的。大胆猜测这样的经历已经影响了他的精神状态。

因此,把爱伦·坡简单地当作一位侦探、推理小说家,显然是过于片面了。事实上,他一生中的推理小说作品只有四、五部,但依然被认可为推理小说的鼻祖。我就从我阅读的几篇来感受一下爱伦·坡在推理小说上的开创性工作。

推理

在本书中,《莫格街凶杀案》、《失窃的信》、《金甲虫》毫无疑问是最具推理特色的,情节节奏也更快,相对来说少了很多铺垫语言。而前两者更是引出了著名的侦探角色杜宾。从这一点上来说,我猜测柯南·道尔的福尔摩斯和华生这一对搭档角色,灵感就来自于此,不知是否正确

《莫格街凶杀案》公认是世界上首部推理小说,并带来了推理情节的经典元素——密室。不过我阅读后觉得还是有两点可惜。

《莫格街凶杀案》插画,作者:Harry Clarke

一是破案的关键点,即窗户的插销在之前并没有足够的铺垫,直接来到揭秘环节过于突兀。你没有给读者看,你怎么知道读者就没有能力发现呢?这也是侦探元素在书籍这种载体上的尴尬之处,如果有文字描述了,几乎相当于给你缩小了解谜的范围,如果不描述,就是上面这种突兀的感受。

二是铺垫了这样离奇的犯罪现场,最终案犯竟然是一只猩猩,大大降低了读者的感官刺激。相当于现在的发现了麦田怪圈,最后结果就是外星人搞的事情。我突然想起了10年前看过的美剧《迷失》,前期铺垫了大量未解之谜,最后圆不回去了,连时空穿越都搞出来了,类似的还有美剧《危机边缘》。

《失窃的信》中,侦探杜宾尝试完全从对方的角度来思考,是一大特色,并且得到的结论就是那封信就放在显而易见的位置,只不过按照常规思维根本不应该存在的位置,形象地描绘了一种最危险的地方就是最安全的地方的画面,用古话说,叫做大隐隐于市。不过虽然这篇小说广受赞誉,但是以现代人读取的感受来说,太过突兀和儿戏,第一是同样的问题,那封显而易见的信一开始并没有且也没办法给读者交代;第二是这位家族没落的杜宾先生,竟然能随意拜访大臣。不过这都不重要了,毕竟这部小说发表在将近200年前,以当时的文学环境来说,这样的一篇故事应该是相当吸引人的。

《金甲虫》是我认为的书中最具精彩的一个故事,我指的并非其中对密码的解谜(虽然我也认为在当时是相当新奇的了),而是其中对羊皮纸如何出现骷髅的解释。因为这张羊皮纸在前面已经有明显的交代,而且给出了二人在此的争议的画面。读者从这里很难能猜到是因为隐形墨水的原因,导致的后续威廉·勒格朗一系列怪异行为。

《金甲虫》插画,作者:Harry Clarke

除此之外,我读的这本书中还有两篇故事,《瓶中手稿》和《乌鸦》,它们和《红死魔的假面具》共同导致了我的另一处困惑。

故事情节架空,莫名其妙

从今天的视角很难理解爱伦·坡当时的创作意境。《红死魔的假面具》就是这样的一篇,一群人的狂欢会,怎么就有一个怪人突然杀了所有人。

不可否认地这篇小说有相当多的对人性的讽刺,但是红死病到底是什么呢,未免太多让人好奇。网上有资料说它指的是肺结核病或者霍乱,它们在当时都很常见。显然前者更可信一些:

  1. 《红死魔的假面具》发表于1842年,这一年爱伦·坡的妻子开始感染肺结核,并在5年后去世;
  2. 肺结核是传染病,症状会发展为咳血

爱伦·坡当时可能正是基于这样的担忧,才写出了这篇小说,可能也代表着一种宿命感。

所以说,历史人物的行为都不能离开当时的社会环境来空谈,抛开爱伦·坡的生平来阅读这篇小说,必然不能感同身受。

起码《红死魔的假面具》还能了解到其创作背景,但是《瓶中手稿》呢?这篇小说则是一篇来源于传说(幽灵船和地底空洞)的魔幻创作,对于当时的读者来说,猎奇的感受更多一些,不过对于信息爆炸的今天,新鲜感骤减。不过还是那句话,要看历史环境,况且,这只是爱伦·坡为了参加比赛的投稿作品。

《瓶中手稿》插画,作者:Harry Clarke

最后是《乌鸦》,这是最让我困惑甚至恼怒的一篇,完全不知道它在讲些什么,这样都能成为知名作品,恐怕要求也太低了。为此我不得不去查询这篇文章的背景资料——噢,原来这是一篇诗,爱伦·坡也是一位诗人。

这里我就不对诗加以评论了,毕竟我对现代诗嗤之以鼻,况且,翻译也失去了原作的韵味。

总结

毫无疑问,爱伦·坡是一位复杂的作家,虽然被称为推理小说的鼻祖,影响了柯南·道尔、江户川乱步、希区柯克等一系列大作家,但我们却不能以推理作家来称呼他。

他的作品在氛围风格和心理刻画上的表现,也许是他40年命途多舛生命中的流露。这一生中,他少年颠沛流离,中年亡妻、酗酒,在写作职业上的努力均付之东流。上面的这些作品,一篇最多为他带来几十美元的收入。在这样的逆境之下,《黑猫》、《泄密的心》、《威廉·威尔逊》中主人公的心理活动何尝不是爱伦·坡本人心境的反应。

我觉得他和梵高的境遇有一些类似,都是生前默默无闻,死后方才发现其才华。当然,梵高也是爱伦·坡的后辈,他出生时是1851年,而爱伦·坡死于1849年,以当时的卫生条件,加上他的不良习惯,这并不意外。

总之,以读故事的猎奇心态读爱伦·坡的作品,必然是一种浪费。你需要回到200年前那个时代,切身感受爱伦·坡的成长历程和际遇,才能读懂他的作品。

(文中插画来自于wikiart.org)

一、前言

qiankun 开始,沙箱(或沙盒、sandbox)已经成了几乎所有微前端框架的标配功能。但事实上其内部涉及实现的大量细节,导致每家的能力参差不齐。

严格来说,沙箱并没有遵循的标准,在一些细节上的实现也没有对错,具体行为还是要取决于业务的需求。

Node.jsvm 模块并不能直接移植到浏览器端,一个很大的原因在于浏览器涉及的视图(包括 DOM、URL)无法被拷贝,只能共享,那么共享到什么水平就成了沙箱方案能力差别的衡量标准之一。

二、变量隔离

沙箱的基础能力就是隔离上下文,让下列操作都只局限在特定的上下文内,不会干扰到外部:

  • 删除已有变量,如 delete obj.aRelect.deleteProperty(obj, ‘a’)
  • 修改已有变量
    • 修改取值,如 obj.a=1Reflect.set(obj, ‘a’, 1)Reflect.defineProperty(obj, ‘a’, { value: 1 })
    • 修改描述符,如 Reflect.defineProperty(obj, ‘a’, { writable: false })
    • 修改 frozen、sealed、extensible 状态,如 Object.freeze(obj.a)Object.seal(obj.a)Object.preventExtensions(obj.a)
    • 修改原型链,如 Object.setPrototypeOf(obj.a, null)
  • 创建新的变量,如 obj.a=1Relect.defineProperty(obj, ‘a’, {value: 1})

上面的 obj 对象即指上下文对象,在浏览器中通常是 windowdocument ,这两个全局对象。但事实上,window 下的所有属性都可以直接取到,如 addEventListenernameCSSlocationhistorynavigatorHTMLElement 等等,不胜枚举。因此, 沙箱不可能监视所有变量的属性删除/修改/创建,因此也就不可能实现“完美”沙箱 ,毕竟你不能遍历 window 下的所有属性,都监视一遍。

with(){} 的做法不在考虑范围之内,对性能损耗过大。

这个事实带来的后果是,如果你想逃逸出沙箱,是非常容易的,比如 navigator.no=1 。所以,沙箱在微前端中有使用价值的前提是, 你必须尽可能保障对全局变量的访问是可控、无副作用的 ,这是沙箱的脆弱之处,也是一种规范。接下来我们将在这一规范下继续讨论沙箱的实现问题,假设我们只考量对 window 和 document 这两个变量的属性监视。

2.1 属性监视

毫无疑问,在现代浏览器中,Proxy 是监视对象的最佳方案,通过它,我们应该可以被通知且控制获取、修改、删除、遍历等几乎所有操作。但是,proxy 对象真的可以为所欲为吗?

观察下列代码:

这里涉及到了关于 configurable 导致的错误,事实上,有大量的操作都是被 proxy 所禁止的,在 ECMA262 上的Proxy部分搜索 Invariants 能查询得到。因此 proxy 对象并非无所不能,它无法任意伪装原始对象的行为, 该失败的必须失败 。相关规则包括如下:

对象操作 不变量
defineProperty
  1. 如果目标对象是不可扩展的,那么使用defineProperty新增属性时不能返回true;
  2. 如果目标对象没有不可配置属性a,则代理对象也不能用defineProperty在将属性a定义成不可配置时时返回true;
  3. 如果目标对象没有不可配置且不可写的属性a,则代理对象也不能用defineProperty在将不可配置属性a定义成不可写时返回true
deleteProperty
  1. 如果目标对象有不可配置属性a,那么代理对象在用deleteProperty删除a时不能返回true;
  2. 如果目标对象是不可扩展的,且有属性a,那么代理对象在用deleteProperty删除a时不能返回true;
get
  1. 如果目标对象有不可配置且不可写的属性a,那么代理对象在用get取值a时必须返回和目标对象相同值;
  2. 如果目标对象的属性a是不可配置的,且是缺少get的存取类型,那么代理在用get取值a时必须返回undefined
getOwnPropertyDescriptor
  1. 如果目标对象有不可配置的属性a,那么代理对象在用getOwnPropertyDescriptor获取a时不能返回undefined;
  2. 如果目标对象是不可扩展的,且有属性a,那么代理对象在用getOwnPropertyDescriptor获取a时不能返回undefined;
  3. 如果目标对象是不可扩展的,且没有有属性a,那么代理对象在用getOwnPropertyDescriptor获取a时必须返回undefined;
  4. 除非目标对象有不可配置且不可写的属性a,那么代理对象在用getOwnPropertyDescriptor获取a时就不能是不可配置且不可写的;
getPrototypeOf
  1. 如果目标对象是不可扩展的,那么代理对象在用getPrototypeOf时必须返回与在目标对象上调用的返回值
has
  1. 如果目标对象有不可配置的属性a,那么代理对象在用has获取a时不能返回false;
  2. 如果目标对象是不可扩展的,且有属性a,那么代理对象在用has获取a时不能返回false;
ownKeys
  1. 如果目标对象是不可扩展的,那么代理对象在用ownKeys时必须返回目标对象的全部属性名,不能包含额外属性名
set
  1. 如果目标对象有不可配置且不可写的属性a,那么代理对象就不能用set给a设置不同的值;
  2. 如果目标对象的属性a是不可配置的,且是缺少set的存取类型,那么代理在用set设值a时必须返回false

看似复杂,但实际总结来看,就是代理对象必须遵循一个原则: 操作的结果要真实反应 target 的最新状态。

举几个例子:

  • 如果Reflect.has(proxyObj, ‘a’)返回true,那么target就必须不能有一个不可配置的属性a;
  • 如果Reflect.set(proxyObj, ‘a’, 1)返回true,那么target对象必然不能是不可扩展的,也不可以有一个不可写也不可配置的属性a

如下的做法,直接代理原始 window、document 肯定是不可以的,根据上面的 Invariants 可知我们几乎必须把属性同步给原始的 window、document 才能不报错,显然违背我们做沙箱的初衷。

1
const proxy = new Proxy(window, {});

因此,通常的做法是把一个 新创建的对象 当作原始对象进行代理,下文简称为 target

1
2
const target = {};
const winProxy = new Proxy(target, {});

所有的操作几乎都是最终体现在 target 对象上的,个别稍有例外。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const target = {} as Window;

const winProxy = new Proxy(target, {
defineProperty: function (target: Window, p: PropertyKey, attributes: PropertyDescriptor): boolean {
return Reflect.defineProperty)(target, p, attributes);
},
deleteProperty: function (target: Window, p: PropertyKey): boolean {
return Reflect.deleteProperty(target, p);
},
get: function (target: T, p: PropertyKey /*, receiver: any */): any {
return Reflect.get(target, p);
},
getOwnPropertyDescriptor: function (target: T, p: PropertyKey): PropertyDescriptor | undefined {
return Reflect.getOwnPropertyDescriptor(target, p);
},
has: function (target: T, p: PropertyKey): boolean {
return Reflect.has(target, p);
},
ownKeys: function (target: T): ArrayLike<string | symbol> {
return Reflect.ownKeys(target);
},
set: function (target: T, p: PropertyKey, value: unknown /*, receiver: unknown */): boolean {
return Reflect.set(target, p, value);
},
getPrototypeOf() {
return Reflect.getPrototypeOf(window);
}
});

但显然这样是有严重问题的,因为 target 是伪装的 Window 对象,它身上没有任何属性,这不但会影响 get、getOwnPropertyDescriptor、has、ownKeys 这些只读操作的结果,由于 Proxy 的规则,同样也会影响 defineProperty、deletePrperty、set 这些写操作的结果。

举个例子,本来真实 window 对象上有一个不可配置的属性 foo,正常来说,我们用 defineProxy 修改其描述符类型时一定会报错,但是 target 本身并没有任何属性,Reflect.defineProperty(target)却是成功的,不符合期望。

于是,业界常规的做法都是会把 原始对象的自身属性拷贝到 target 中,特别是那些不可配置的属性 。这样无论是读操作还是写操作,其结果都真实反应到了代码对象的 target 中,不会被任何 Proxy 原则所影响。

1
2
3
4
5
6
const target = {} as Window;

for (let key of Object.getOwnPropertyNames(window)) {
const descriptor = Reflect.getOwnPropertyDescriptor(window, key);
if (!descriptor.configurable) Reflect.defineProperty(target, p, descriptor);
}

这一步的成本稍高,但是又是必须的。在具体的实现策略上也可以区分为一次性拷贝和懒惰式拷贝,即用到某属性时才执行拷贝。

2.2 主动变量逃逸

虽然沙箱的关键作用就是为了限制变量的访问和变更范围,但是毕竟在同一个浏览器页面之下,难免有需要例外放行的 case。我们称这类变量为 exception 或者 escaped,这种功能称之为“主动变量逃逸”。

实现主动变量逃逸比较简单,以 set 和 get 操作为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const target = {} as Window;

const winProxy = new Proxy(target, {
get: function (target: T, p: PropertyKey /*, receiver: any */): any {
if (isEscaped(p)) {
return Reflect.get(window, p);
}
return Reflect.get(target, p);
},
set: function (
target: T,
p: PropertyKey,
value: unknown /*, receiver: unknown */
): boolean {
if (isEscaped(p)) {
return Reflect.set(window, p, value);
}
return Reflect.set(target, p, value);
},
});

不过别忘记了 Proxy 的那些 Invariants 限制,上述这些操作的结果都要反应到 target 身上,所以最后还是得把原始对象(如 window)上的属性同步到 target 上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const target = {} as Window;

const winProxy = new Proxy(target, {
get: function (target: T, p: PropertyKey /*, receiver: any */): any {
if (isEscaped(p)) {
// 同步到target中
Reflect.defineProperty(
target,
p,
Reflect.getOwnPropertyDescriptor(window, p)
);
return Reflect.get(window, p);
}
return Reflect.get(target, p);
},
set: function (
target: T,
p: PropertyKey,
value: unknown /*, receiver: unknown */
): boolean {
if (isEscaped(p)) {
// 同步到target中
Reflect.defineProperty(
target,
p,
Reflect.getOwnPropertyDescriptor(window, p)
);
Reflect.set(window, p, value);
return Reflect.set(target, p, value);
}
return Reflect.set(target, p, value);
},
});

2.3 函数属性上下文

上面提到,我们需要把原始对象(window、document)的属性同步到 target 对象中,Proxy 才会不受到 Invariants 的影响,能更真实的模拟读写操作。

我们看下面一个例子:

再来看这样一个例子:

有这样一类函数,它们只能在指定的上下文中执行,即便是 Proxy 也不可以,否则在 Chrome 下就会报告 Illegal invocation 错误。在 Firefox 和 Safari 上的错误信息会更通俗易懂一些。

目标没有很好的办法来解决这个问题,毕竟函数内部的逻辑是无法预测的,只能尽可能兼容。一些策略有:

  • 如果属性名是 constructor,无需特殊处理;
  • 如果属性名以大些字母开头, 认为它们是构造函数 ,无需特殊处理;
  • 创建包装函数来锁定上下文:
1
2
3
4
5
6
7
8
const newValueInTarget = function (this: any, ...args: unknown[]): unknown {
// 小写字母也可能是构造函数
if (new.target) {
return Reflect.construct(valueInRaw, args);
}

return Reflect.apply(valueInRaw, raw, args);
};
  • 一些特殊属性的处理,例如 window 上的 eval、isFinite、isNaN、parseFloat、parseInt、hasOwnProperty、decodeURI、decodeURIComponent、encodeURI、encodeURIComponent,直接走主动变量逃生即可

三、执行 JavaScript 代码

上面讨论的是沙箱的最关键能力——变量隔离,但无论实现怎样的能力,子应用的 JS 代码还是要得到执行,那么该如何执行的?

3.1 eval

业界普遍的做法是异步 fetch 到源代码,然后 eval 它,虽然需要跨域环境的支持,但并不是难事。只是 eval 需要一些技巧。

首先,eval 需要在真正的 window 上下文中执行,避免调用环境的影响,这一点,目前已经有比较明确的实现方案,就是“间接调用”:

1
2
3
function evalScript(code: string): any {
return ("", eval)(code);
}

其次,利用函数入参来改变一些全局变量名的作用域,将其指向既定的对象,比如:

1
2
3
4
evalScript(`;
(function (window, self, parent, top, globalThis, document) {
${appCode}
}).call(winProxy, winProxy.window, winProxy.self, winProxy.parent, winProxy.top, winProxy.globalThis, winProxy.document)`);

从这里也能看出,如果直接引用如 location、navigator、history 将无法被沙箱捕获,你需要用 window.location、window.navigator、window.history 的方法。进而可以推断出你在全局定义的变量,也必须以 window 属性的方式来读取,比如:

1
2
3
4
5
6
7
8
9
10
11
12
<head>
<title></title>
<script>
var loadStartTime = Date.now();
</script>
</head>
<body>
<script>
var loadCost = Date.now() - loadStartTime;
</script>
<script src="./entry.js" entry></script>
</body>

像上面这种 case,如果不以 window.loadStartTime 的方式能不能读取得到呢?也有一些技巧可做到。

比如使用嵌套递归作用域的方式来实现,相当于每执行一次 JS 之后,就会为下一次执行生成一个新的嵌套上下文,这样后面的 JS 就可以直接读取上次的变量。

1
2
3
4
5
6
function() {
var loadStartTime = Date.now();
function() {
var loadCost = Date.now() - loadStartTime;
}
}

具体的实现机理稍有复杂,理论上也会带来额外的性能开销,而且对于下面这种双向访问的场景也无法支持:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<head>
<title></title>
<script>
var loadStartTime = Date.now();
function sendLog() {
// 访问未预定义变量
sendToServer({ loadCost });
}
</script>
</head>
<body>
<script>
var loadCost = Date.now() - loadStartTime;
</script>
<script src="./entry.js"></script>
</body>

不过仍然具有一定的价值,对于以 HTML 作为 entry 的子应用的容纳范围更广,子应用的灵活度更高。

3.2 环境变量

有时,需要暴露给子应用的 JS 一些临时的虚拟变量,比如 qiankun 提供的 __POWERED_BY_QIANKUN__ ,而且允许不同子应用读取到的同一名称的变量有不同的取值。

如果不开启沙箱的话,这一功能反而困难,需要在 window 上定义变量,然后以同步的形式运行子应用 JS 代码,最后在从 window 上移除掉。这个过程不但很可能和 window 上已经有的同名变量冲突,而且也只能保证同步代码中能读取到,异步代码中就读不到。举例说明:

1
2
3
4
5
if (window.__IN_MICRO_ENV__) {
Promise.resolve().then(() => {
console.log(window.__IN_MICRO_ENV__); // undefined
});
}

在沙箱环境中,实现环境变量更简单,而且可以不受同步/异步的影响,可以持续访问。

1
2
3
4
evalScript(`;
(function (window, document, __IN_MICRO_ENV__) {
${appCode}
}).call(winProxy, winProxy.document, winProxy.__IN_MICRO_ENV__)`);

3.3 ESM

ESM 格式的 JS 代码不能直接 eval 来执行。事实上,浏览器还未提供能直接运行 ESM 源码的方法。Garfish 采取来将源码转换成 URI 的方式实现了一定程度的 eval 能力,但是需要正则匹配 import 指令,存在一定的隐患。即便如此,因为不能用函数直接封装 ESM 源码,因此也无法实现沙箱运行。因此,garfish 还实现了一套运行时转译 ESM 的机制,但是对性能有较大影响,相信其稳定性也存在安全隐患。

四、DOM 结构

一般来说,子应用有自认为的 DOM 环境,比如 html、body、head 以及#app 等等。

4.1 固定 DOM

在沙箱环境中,如果把真正的 html、body、head 暴露给子应用,那么它很有可能在上面做一些副作用的操作,比如插入新 DOM、修改样式等等。为了避免这种情况,微前端框架一般都会给子应用生成一个模拟的 DOM 结构,比如:

1
2
3
4
5
6
<pseudo-html>
<pseudo-head>
<pseudo-title></pseudo-title>
<pseudo-head>
<pseudo-body></pseudo-body>
</pseudo-html>

DOM API 中的 document.documentElementdocument.bodydocument.head 也都指向它们。

根据业务需求,可以做更深的伪装定制,通过以下测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
document.documentElement.tagName === "HTML";
document.documentElement.nodeName === "HTML";
document.documentElement.version === "";
document.documentElement.parentNode === document;
document.documentElement.parentElement === null;
document.documentElement.constructor === HTMLHtmlElement;
document.documentElement instanceof HTMLHtmlElement === true;

document.body.tagName === "BODY";
document.body.nodeName === "BODY";
document.body.constructor === HTMLBodyElement;
document.body instanceof HTMLBodyElement === true;

document.head.tagName === "HEAD";
document.head.nodeName === "HEAD";
document.head.constructor === HTMLHeadElement;
document.head instanceof HTMLHeadElement === true;

注意 document.documentElement.parentElement ,如果等于 null,可能对一些视觉框架、组件库等需要用 parentElement 向上递归搜索的功能不友好。可根据需要是否开启以上伪装能力。

4.2 存量 DOM

存量 DOM 是指那些在子应用的 HTML entry 中已有的 DOM 结构,简单的如#app,也可能有更复杂的结构。

通常需要把它们同步到上述固定 DOM 的 body 中,也有些方案把 head 中的 meta 都同步了过来。

一旦需要拷贝,需要考虑如下问题:

  • 非法元素、样式的过滤;
  • 元素在沙箱环境的适配

4.3 新增 DOM

新增 DOM 有多种创建方式:

  • document.createElement();
  • dom.clone();
  • dom.innerHTML=

通常来说只有第一种会被沙箱接管,使得新创建的 DOM 的 ownerDocument、baseURI 是符合沙箱环境的。

需要特别关注的是,新创建的 script 元素会被转换成一个无实际功能的<pseudo-script>元素。框架会在后台自行下载/执行其代码,模拟了 script 的能力。

Custom Element默认是inline类型,除了在shadow DOM内部使用 :host{display:block} 外,只能在外部用选择器覆盖。未来如果Safari支持继承built-in元素后可以解决。

五、总结

  • 沙箱只能处理有限范围内的变量隔离,通常为 window 和 document;
  • 以 eval function 的方式执行 JS 源码,全局变量引用应以 window 属性的方式使用;ESM 无法支持沙箱;
  • 子应用的 DOM 结构可以被伪装,但仍然能轻易实现逃逸

沙箱的本质是为子应用打造一个微型的独立浏览器环境,受限于成本,无法做到尽善尽美,仍然需要子应用遵循一定的规范和约定 。而由于微前端的主、子应用在管理上的独立性,往往沙箱能力的升级会对子应用造成较大的影响。

六、未来发展

业界对沙箱的实现均强依赖 Proxy 技术,区别仅在于对副作用的拦截能力多少。随着业务复杂度的提升,以及一些存量旧业务在遵循冲突约定的改造成本上的考虑,逐渐意识到 Proxy 的能力仍然有限,想实现健壮性更强的沙箱环境,开发成本高且性能不稳定。

业界已经有一些方案开始逐渐回归 iframe。iframe 天生具有强隔离性,不必对全局变量一一关注即可达到期望的隔离性能。不过这种一刀切的做法在实际的业务中仍然受到挑战,比如对主动逃逸变量的支持,比如对 DOM 的操作等等,仍然需要一定的机制将 iframe 和主页面整合到一起。这一步,仍然离不开 Proxy 的支持。

ECMA 已经有一个新的提案,叫做ShadowRealm,位于 Stage3,对于创建独立的 JS 执行环境是一个比较理想的方案。不过微前端离不开视图,如何共享视图对象以及控制共享的粒度,就不是 ShadowRealm 的范围了。

没坏的话就不要修

这里讲的系统应该能够治愈。不过在现实场景中不太可能,即使可能在时效性上也不允许。

如果这里我们把这句话理解成:不要瞎折腾,没事找事,显然有一种消极的态度,如果一直安于现状,就会阻断创新。

从咨询师的角度来看更容易理解这句话,咨询师是系统的“外来物”,不是对于系统出现的所有问题都要横加干涉,适当的放任反而有益于系统的成长。可以借着下一句话来深入理解:

反复治疗一个可以治愈的系统最终让它不能治愈

引用书中的一句话就能轻松解释:

那些孩子四岁多了还帮忙擦鼻子的父母,以及靠为同一个客户反复解决同一个问题混饭吃的顾问,都应该牢记这个秘密。

那是那句话,不是都有问题都要横加干涉。否则最终会超出自己的能力范畴。

每个处方都包含两部分:药品和正确使用它的方法

我能把它理解成:“文档很重要,是产品的一部分”么?

我们在提供服务的时候,除了服务实体本身之外,还需提供使用说明。某些领域会提到以代码自注释能力来衡量代码的优劣,我觉得有一定道理但不是全部。

简单的系统确实可以做到轻松上手的目的,但也仅限于简单的系统。

如果已经做过的事情没能解决问题,就告诉他们做点别的

好打浑的说辞,不过确实有效。系统的某些问题往往出乎所有人意外,如果不能亲身实地地验证,仅仅依赖现有经验的人脑逻辑推断,确实不一定能够做出最终的诊断。

所以,在走投无路的时候,要学会接纳那些看似绝对无效的方案,说不定有意外的收获。

务必让他们付给你足够多的钱,这样他们才会照你说的去做

就像练习书法用廉价的草纸会比用昂贵的字帖更不容易练好一样,只有你付出的成本更高,你才会更加专注和认真,因为失败的损失更大。

有另一种基于责任归属的解释,如果用字帖还练不好书法,那么将无法将责任落在纸的种类身上。

因此,通过提高任务的成本和消耗,将更有可能让执行脉络贴近自己的设计。

来得早不如来得巧

时机很重要。

【伯登法则】要是你不能改掉缺点,就把它变成特点

这一法则将适用很多行业黑话,比如公司提供晚餐意味着加班更多。产品的特性从不同的视角可能会有截然相反的描述,核心原则就是避重就轻。这不一定就是一种欺骗,因为很可能那些未提及的缺陷对客户压根没有影响,或者打一个时间差,等客户发现了的时候,缺陷已经被修复,如果是可能甚至还可以是付费升级。

【镀金法则】要是没法当成特点来宣扬,那就冒充一下

这是“扒瞎”的意思吗?也许有作用,只要没人拆台和较真。对于聚集了大量耿直的人的行业中,可能风险性较大。

如果仅仅是电视广告在那里“镀金”的话,相信很少有人会真的打电话投诉;如果在一个小型的会议现场胡说八道,我想大概率会被“怼”。

这种缺乏货真价实干货的纯语言技巧,肯定不能撑太久。因此才会有下一句:

所有镀金的东西都得改正

eslint 早已取代 jslint 成为了 JavaScript 标准的风格检查工具,提供了大量规则(rule)。这些规则部分是可以支持 fixable 的,也就是说可以自动修复代码。但是现在来看,eslint 提供的修复功能还是太弱。因此 Facebook 开发了 prettier,一个专门司职代码格式化的工具,它不仅仅支持 JavaScript 语法,甚至还支持 Markdown。因此,把它们配合起来是一种自然而然的想法,首先我们有一个 eslint-config 定义,我们希望经过 format 之后的代码能100%通过 lint 校验。我们也希望在 git hook 中能自动 format 代码。

在实际应用中,让 prettier 完美配合 eslint 并不容易。根本原因在于 prettier 格式化代码的一些行为是不可配置的,而这些配置极有可能与 eslint 配置是冲突的。

例如下面的代码:

1
a === 1 || b === 2 || c ===3

在 eslint 中,我们经常配置在折行时把符号写在前边:

1
2
3
a === 1
|| b === 2
|| c ===3

但 prettier 则强行写在后面:

1
2
3
a === 1 ||
b === 2 ||
c ===3

prettier 提供了与 eslint 配合使用的官方方法。但这种方式的本质是使用 eslint-config-prettier 来抹平 prettier 与 eslint 之间不可调和的冲突。一旦我们定义的私有 eslint-config 与 eslint-config-prettier 有影响格式化结果的冲突,那么 lint 必然失败。不过这种方式的一大好处是仅仅对接 eslint 就能完成 lint 与 fix 的操作,集成性很强。

理解这种现象很容易,eslint 的 rules 是没有顺序的,因此在 fix 阶段,极有可能 prettier 的 rule 执行在最后阶段,结果显然与我们定义的最终 eslint 配置是冲突的。


相比于引用一系列 eslint-config,并维护它们的顺序,我们索性只维护我们自己的一份 eslint-config,反而更清晰。有这一份配置来执行 fix,产出一定可以通过lint。

但我们肯定不想直接抛弃 prettier,那么就把它的执行放在最前面,让它的产出再通过 eslint 即可。

已经存在这种现成的解决方案,就是 prettier-eslint。虽然看起来比较畸形,但可能是唯一一种比较能用且清晰的方案了。

但也有缺点,一旦将来某些 prettier 的不可配置的行为也不能被 eslint 所 fix,工作流就 gg 了。整合的过程就是这样,本来是相互分离的两个系统,让它们一起工作,总要失去点什么。

Code ➡️ prettier ➡️ eslint –fix ➡️ Formatted Code ✨

Q:如果能保证 prettier 提供的 rule 能先行执行呢?

继了解完“==”的原理后,再来了解一下加号“+”的 ECMAScript 实现原理。

例如:

1
a + b

第一步,对 a 和 b 执行 *toPrimitive()*,不指定 hint

toPrimitive(a) 为例,先看 a 有没有定义 Symbol.toPrimitive,比如:

1
2
3
4
5
6
7
8
9
10
11
12

a[Symbol.toPrimitive] = customToPrimitive;
function customToPrimitive(hint) {
switch (hint) {
case 'number':
...
case 'string':
...
default: // 'default'
}
};

如果定义了 Symbol.toPrimitive 属性,则执行:

1
customToPrimitive.call(a, 'default')

否则执行原生 *toPrimitive(“number”)*,也就是要依次调用 a 的 valueOftoString 方法。

如果执行 a.valueOf() 返回不是 Object,则为 toPrimitive(a) 的终值,否则执行 *a.toString()*。

接下来,看 a 有没有定义 toString,如果有,则执行 *a.toString()*,为 toPrimitive(a) 的终值。

如果没有,则执行原型链顶端的 Object.prototype.toString,这首先要看 a 有没有定义 Symbol.toStringTag

如果定义了,比如:

1
2
3
4
5
6
7
8

function customStringTag() {
...
}

Object.defineProperty(a, Symbol.toStringTag, {
get: customStringTag
});

那么返回 *”[object “ + customStringTag.apply(a) + “]”*,否则返回 *”[object Object]”*,为 toPrimitive(a) 的终值。

如果发现 toPrimitive(a) 或者 toPrimitive(b) 任一为字符串,则执行字符串拼接,否则执行数字加法,即 *toNumber(a) + toNumber(b)*,这也能解释 true + true = 2 的问题。


可见 a + b 核心就是 toPrimitive 操作,只不过从 ES2015 以来,toPrimitive 受到 Symbol 的影响,变得越来越复杂。

相比之下,减号“-”就很简单了,就是执行 *toNumber(a) - toNumber(b)*。

0%