Skip to content

Lazy

🌱初步完成

本文中内容已经初步完成,能够正常提供参考,但存在可能的错漏/亟待改进部分。

提示

此处介绍Internal.Lazy<T>的相关信息。

文字释义

  • “Lazy”一词多见于惰性求值等,假设现有一个类型为lazy<string>的对象,它表示可以提供一个类型是string的值,但该值在对该lazy对象首次调用get方法进行求值前都还未被创建。

类型定义

  • 借助ProbeJS,得以查看其API文档,它实现了Internal.Supplier 接口,这意味着它拥有该接口定义的方法,用于提供某个值。
ts
class Lazy<T> implements Internal.Supplier<T> {
  static serviceLoader<T>(type: T): Internal.Lazy<T>;
  getClass(): typeof any;
  toString(): string;
  notifyAll(): void;
  notify(): void;
  static of<T>(supplier: Internal.Supplier_<T>): Internal.Lazy<T>;
  wait(arg0: number, arg1: number): void;
  hashCode(): number;
  wait(): void;
  forget(): void;
  wait(arg0: number): void;
  static of<T>(supplier: Internal.Supplier_<T>, expiresInMs: number): Internal.Lazy<T>;
  get(): T;
  equals(arg0: any): boolean;
  get class(): typeof any
}

常用方法

get

  • get(): T
  • 该函数用于获取其内部持有的值。
KubeJS
js
let lazyNum = Utils.lazy(() => 123);
let num = lazyNum.get();

通过get对lazy对象进行求值

forget

  • forget()
  • 该函数使lazy对象丢弃内部已经创建的值,当下次调用get方法时,它会创建新值。
js
let lazy = Utils.lazy(() => { 
  console.log("Supplier: Message"); 
  return "Message";
});
lazy.get();
lazy.forget();
lazy.get();

这里第二次调用get时依然会打印"Supplier: Message" 这证明内部原有的值被丢弃了

实例创建

  • 可使用Utils.lazy(param) 函数创建一个lazy对象。
  • 示例:创建了一个延迟提供number类型值的lazy对象。
KubeJS
js
let lazyNum = Utils.lazy(() => 123);

相关信息

  • Internal.Supplier<T> 不同的是,Supplier每次求值都是获取一个新实例,而lazy对象只会在第一次求值时执行内部的Supplier求值,之后的求值均返回同一个实例。
js
let lazy = Utils.lazy(() => { 
  console.log("Supplier: Message"); 
  return "Message";
});

只有第一次调用get方法才会打印"Supplier: Message" 这证明内部的Supplier只执行了一次

小结

知晓在KubeJS中创建一个lazy对象使用Utils.lazy方法。
知晓lazy的get与forget方法。
知晓lazy与Supplier的不同。

贡献者

页面历史