haXe学习笔记(四)

一、显式变量:定义变量时申明变量类型

比如: var myVar:String;

变量未赋值之前不能使用

一旦变量类型申明后,不能再赋值其他类型的值

但可以用其他类型重新申明变量,比如var myVar:Int,但最好不要这样做

二、函数变量

函数public function outputString(st : String) : Void;的类型为String->Void

public function sumAndCeil(a : Float, b : Int) : Int类型为Float->Int->Int

public function filter(f : String->Bool) : List<String>类型为(String->Bool)->List<String>

public function takesStringReturnsFunction(s : String) : String->Bool类型为String->(String->Bool)

三、动态函数

函数和静态函数都可以设置为动态,这样在运行时,可以重新设置函数的值,但类型必须一致。

动态函数只能设置在类的实例上,静态函数只能设置在类上,另外动态函数不能重载,也不能用super

public dynamic function saySomething()

public static dynamic function saySomething()

四、匿名对象

var obj: { id:Int, name:String } = { id:10, name:"Name" };

五、Duck Typing:如果某个类里面有匿名对象里的所有成员变量,这此类可以赋值给匿名变量

class DuckType

{

public var id:Int;

public var name:String;

public function new(id:Int, name:String)

{

this.id = id;

this.name = name;

}

}

var obj: { id:Int, name:String }  = new DuckType(10, "Name“);

六、隐式变量

申明变量时不指定类型,由编译器判断其类型(第一次赋值时)

七、类型转换

1. 安全转换

var a : A; var b : B; b = cast(a, B);//如果a不是B类型,运行时会出错

2. 非安全转换

var i : Int; i = cast "Hello";//可以将任意类型的变量转换为被赋值变量的类型,但如果不能转换时,会报运行时错误

3. untyped

untyped { myVar.doSomething();}//此时编译器不会检查类型,但可能产生运行时错误

八、模板类

1. class Array<T>

2. class Fridge<T: (Fruit, Eatable)>//T必须是Fruit和Eatable类型

你可能感兴趣的:(学习笔记)