神经网络游戏场04:类+继承+抽象类+接口+泛型

类的构造省略,可以直接参见下边的例子(nn.ts中的 class Link)
注意,类中的静态对象
      还有readonly 关键字用于描述只读的对象的属性
# Link是一个类,
# 其具有   id, source: Node;dest: Node; weight ,isDead , errorDer ,   accErrorDer = 0,   numAccumulatedDers = 0,  regularization: RegularizationFunction 这些属性
# 具有 一个 constructor 构造函数(创建实例时调用):
#           在用随机权重初始化的神经网络中构造一个链接。
#           以设定source源节点, dest目标节点,regulation正则化函数(可以为null)



# 每个链接都有一个权重以及一个源节点和目标节点。它还有一个内部状态(相对于特定输入的误差导数),在运行反向传播后更新。
#  

export class Link {
  id: string;
  source: Node;
  dest: Node;
  weight = Math.random() - 0.5;
  isDead = false;
  /** Error derivative with respect to this weight. */
  errorDer = 0;
  /** Accumulated error derivative since the last update. */
  accErrorDer = 0;
  /** Number of accumulated derivatives since the last update. */
  numAccumulatedDers = 0;
  regularization: RegularizationFunction;


  constructor(source: Node, dest: Node,
      regularization: RegularizationFunction, initZero?: boolean) {
    this.id = source.id + "-" + dest.id;
    this.source = source;
    this.dest = dest;
    this.regularization = regularization;
    if (initZero) {
      this.weight = 0;
    }
  }
}

继承

class Dog extends Animal{

}

super

class Dog extends Animal{
   move(){
   		super.move() # 使用super关键字调用父类
   }
}
class Dog extends Animal{
  constructor(*,age:number ) {
   super(*);# 重写构造函数时必须调用父类的构造函数
   this.age=age;
    }

}

抽象类

希望继承时的效果如下

class Dog extends Animal{
  constructor(age:number ) {
   super();
   this.age=age;
    }
}
abstract class  Animal{
  name :string;
  constructor(name) {
   		this.name =name;
  }
  abstract func():void;# 抽象方法,子类必须实现
 }

接口

# 使用接口定义类的结构
export interface ErrorFunction {
  error: (output: number, target: number) => number;
  der: (output: number, target: number) => number;
}
class aErrorFunction implements ErrorFunction {
  error: (output: number, target: number) { return 0;};
  der: (output: number, target: number) { return 0;};
}
/** Built-in error functions */
export class Errors {
  public static SQUARE: ErrorFunction = {
    error: (output: number, target: number) =>
               0.5 * Math.pow(output - target, 2),
    der: (output: number, target: number) => output - target
  };
}

泛型

# 类
class ani<T>(){
	name:T;
   constructor(name:T) {
   this.name=name;
    }
}
# 函数
function func<T>(a:T):number{
    return 0;
}

# 调用
func(a:"a is a string") # 自动推断
func<string>(a:"a is a string") # 手动指定(自动推断无法运行时)
# 两个泛型
function func<T1,T2>(a:T1,b:T2):number{
    return 0;
}

这里的泛型有点像any,下边另一种的模式:

function func<T>(a:T extends Animal):number{
    return 0;
}

参考和更多

# typescript和java一样有响应的封装方式 有private等关键字,get set 方法。如文 https://blog.csdn.net/chelen_jak/article/details/82800532所写:
class Person {
    constructor() {
    }
    private _name: string;
 
    public get name() {
        return this._name;
    }
 
    public set name(name: string) {
        this._name = name;
    }
}
let person = new Person();
person.name = "apple";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值