首页 > 其他分享 >闲谈鸭子类型

闲谈鸭子类型

时间:2025-01-17 21:35:05浏览次数:1  
标签:守戒 闲谈 golang C# 鸭子 类型 和尚

我最近看一本小说《道诡异仙》,主角在去正德寺找和尚的路上遇到了一个乞丐样的假和尚。主角说他是不个和尚,那假和尚说,和尚剃发念经他也剃发念经,和尚守戒吃斋他也守戒吃斋,怎么他就不是和尚了?

是的,我在前段时间的工作中也遇到同事这样的发问:两个对象之间为什么不能互相赋值?我说是因为两个对象类型不一样。他说这两个对象里面字段一模一样,甚至值都快要一样了,怎么还算不同一个类型?

因为我们的强类型是C#,在C#的类型系统里,是不是某个类型,需要打上类型认证的标记,这个标记是与生俱来的,是可以继承的,但是不可以后天修改的。除此之外,即使属性完全一致、方法完全一致,也不能算是相同类型,或是某个接口。门第之间如天涧鸿沟不可逾越。为此我们需要通过反射之类的方式创建诸如AutoMapper之类的方法来让他们之间可以互相转换。

而在Python之类的动态语言里,鸭子类型又是另一种常识了。鸭子类型说的是,如果有个动物长得像鸭子,叫起来像鸭子,走起来像鸭子,那它就是鸭子。

可惜的是动态语言是在运行时判断类型是否符合的,这会使得范式约束会不那么严格,无法提前检查出错误。那就不得不夸夸golang了,对golang来说类型是静态的,但是interface的检查又是基于接口声明的而非标签式的,使得我们能灵活的构建类型以满足各种使用时候的约束,而这些检查又是在编译时可以完成的。基于一些哲学的意识形态上的立场的原因,我是相当喜欢golang的这一特性了。

 

标签:守戒,闲谈,golang,C#,鸭子,类型,和尚
From: https://www.cnblogs.com/pasoraku/p/18677699

相关文章

  • 保险丝有什么类型?
    被动元器件,保护器件,合金电阻,采样电阻,特殊电阻--顺海科技:廖先生保险丝的类型由于其用途广泛,市场提供的保险丝类型非常多样。很多工业生产设施都会采用高压应用型,汽车行业也是如此。它们的目的是使保险丝易于更换,使最终用户能够尽快使设备或汽车恢复工作。保险丝曾经是每个家庭......
  • 枚举类型(enum)的作用和用法
    简介枚举类型枚举类型(enum)是一种用户定义的数据类型,用于定义一组具有相关性的常量。枚举类型使代码更加可读和可维护,因为它为一组整型常量提供了有意义的名字。作用增强代码可读性:通过为一组相关的常量赋予有意义的名称,使代码更易于理解和维护。比如,定义一个表示颜色的枚举......
  • Reddit封号的类型盘点,如何防封?
      Reddit,常被称为“北美免费流量池”,他的流量与亚马逊旗鼓相当,且与B2C卷投资的模式不同,他的流量的免费的。它拥有数以千计的“subreddit”(子版块),这些子版块涵盖了新闻、电子游戏、电影、音乐、书籍、健身、食物和图片分享等各种主题,适合多品类的流量转化,尤其对于跨境电商......
  • JavaScript有几种类型值?能否画出它们的内存图?
    JavaScript中主要有八种类型的值,包括七种原始类型(PrimitiveTypes)和一种对象类型(ObjectTypes)。这八种类型分别是:Number:表示数字,包括整数和浮点数。如:42,3.14159。BigInt:表示任意大的整数。这是一种在ES2020中引入的新类型,用于表示比Number.MAX_SAFE_INTEGER更大的整数。如......
  • 嵌入式杂谈——(问题解决三:嵌入式中的数据类型)
    列举1. 标准固定宽度整数类型这些类型定义在 <stdint.h> 头文件中,用于明确指定数据的位数,适合嵌入式系统中需要精确控制数据大小的场景。类型位数范围(有符号)范围(无符号)说明int8_t8-128到127-8位有符号整数uint8_t8-0到2558位无符号整数int16_t16-32,768到32,767-......
  • 强类型解释,与弱类型的差异
    在编程中,“强类型”(StrongTyping)是指变量在声明时必须明确指定其数据类型,并且在后续的使用中,变量的类型是严格检查和限制的。这意味着你不能将一个变量赋值为与其声明类型不兼容的值,编译器会在编译时检查类型的安全性,从而减少运行时错误。强类型vs弱类型强类型语言:在强类型......
  • MYSQL数据类型
    数据类型结构化数据、例如关系型数据库半结构化数据、HTML、XML、JSON非结构化数据SQL(结构化查询语言)命令关系型数据库擅长处理结构化数据、可以通过结构化查询语言对数据进行CRUD(增删改查)DDL(数据定义语言):主要包含的命令有create、drop、a......
  • EPLAN基本项目文件类型及管理
    alk,elk,ezd等等eplan中有让人眩晕的文档格式,这写文档格式对应着不同的数据库。设备部件数据库格式是alk,设备部件的格式是edz,eplan的项目文件是elk,还有很多,下面也介绍一下。EPLAN的项目是一个离散存储的项目数据库,是项目上创建的原理图、附属文档(如列表和总览等),以及项目中的已使用......
  • Rust如何在代码中查看一个变量的数据类型?
    Rust如何在代码中查看一个变量的数据类型?UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU在Rust中,你可以使用std::any::TypeId来查看一个变量的类型,但是这种方式通常用于调试或元编程,而不是日常开发的主要方法。Rust是强类型语言,通常在编译时就能检查类型,开发者无需显式查看类型。但......
  • 准确说出`'1,2,3,4'.split()`的结果是什么(包括类型和值)?
    在JavaScript中,字符串的split()方法用于将字符串按照指定的分隔符分割成数组。如果没有指定分隔符,那么默认使用逗号(,)作为分隔符(这个说法是不准确的,实际上默认的分隔符是空格,包括空格、换行(\n)、制表符(\t)等)。但是,在这个具体的情况下,字符串是'1,2,3,4',它只包含数字和逗号,没有......