Pony语言学习(三):基础类型 之 Primitive

写在前面的:

这次咱们要鼓捣鼓捣的是Primitive,直译是原始人,原始的事物,我意译一下就是原生类。那么什么是原生类呢?这意味着你无须创建一个对象(或者说只存在一个实例,对于用户定义的原生类来说),你就可以调用它的方法(类似于静态类)。它就像一个盒子,你不必打个标签(创建对象),以彰显你对它的所有权。你直接就可以用里面的东西(方法)。

来自官网的解释:

A primitive is similar to a class, but there are two critical differences:

  1. A primitive has no fields.
  2. There is only one instance of a user-defined primitive.

好,废话不多说,开始吧!

Primitive:

用primitive声明一个原生类,这里要注意一下哦!原生类中没有字段/属性,只可以有方法。例:

primitive Math
    fun add(a: U64, b: 64): U64 =>
        a + b
    fun multiply(a: U64, b: U64): U64 =>
        a * b

在这个例子中,我们定义了一个原生类——Math,其中定义了两个方法:add方法和multiply方法,分别是求两数的和与积。那我们应该如何使用原生类吗?难道我们要创建对象吗?

actor Main
    new create(env: Env) =>
        env.out.print(Math.add(20,9))

瞧,这就是调用原生类方法的方式,这里将输出20与9之和。这样的原生类,我称之为盒子原生类,你若想要其中的功能,只需调用它,是不是很方便:-)

原生类还有一个功能,就是作为记号。

primitive Cat
actor Main
    new create(env: Env) =>
	let kitten = Cat
	if kitten is Cat then
	    env.out.print("Meow!")
	end

这里我们又定义了一个原生类,但没有定义方法。这个原生类的作用是一个记号,用于标识变量或常量的值。

运用记号,我们可以做更复杂的判断:

primitive Cat
primitive Duck
type Animal is (Cat | Duck)
actor Main
    new create(env: Env) =>
	let animal:Animal = Cat
	if animal is Duck then
		env.out.print("嘎")
	elseif animal is Cat then
		env.out.print("喵")
	end

 

瞧,我们定义了一个“枚举”类型,这和C语言中的枚举不同,这个枚举的意思是Animal类型的量可以是Cat类型或Duck类型。怎么样?巧妙吧!

 

内建原生类(内置类型):

primitive关键字也被用于定义一些内建类型,如:

Bool; ISize, ILong, I8, I16, I32, I64, I128; USize, ULong, U8, U16, U32, U64, U128; F32, F64.

原生类的构造方法和析构方法:

原生类可以有两个不同的方法,_init和_final。_init在任意actor之前被调用。_final在任意actor之后被调用。这两个函数没有参数。_init和_final方法以各自不同的原生类顺序而运行。

 

写在后面的:

原生类和类有一点点不同,不能拥有字段/属性;原生类可以作为标记使用;原生类还可以做枚举类型(枚举类型不一定只是原生类)。就这三点,大家记住就可以了。你也可以看看官网关于Primitive的教程:https://tutorial.ponylang.org/types/primitives.html

今天就到这里,我们下次见!欢迎加入Pony语言QQ群261824044!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值