工具函数

元代码

支持通过以下函数生成类中定义的方法调用元代码:

  • objCall(obj, methodName, args...)

  • unifiedObjCall(obj, methodName, args)

  • makeObjCall(obj, methodName, args...)

  • makeUnifiedObjCall(obj, methodName, args)

其中:

  • obj 为 OOP 对象。

  • methodName 是一个字符串,表示方法名称。

  • 第1和第3个函数中的 args... 是传入的参数。

  • 第2和第4个函数中的 args 是元组,表示传入的参数。

示例

利用 makeObjCall 函数创建 OOP 方法调用的元代码:
class Person {
  name :: STRING
  age :: INT
  
  def Person(name_, age_) { 
    name = name_
    age = age_
  }
  
  def setName(newName) {
    name = newName
  }
  
  def getName(year, gender) {
  	if(year<2020)
  		return year
    else
    	return name
  }
}

a = Person("Harrison",20)
f = a.getName{2015}
f(true)

//使用 objCall 方法
objCall(a, "getName", "name1", 2022)
//使用 unifiedObjCall 方法
unifiedObjCall(a, "getName", ("name1", 2022))
//使用 makeObjCall 方法
makeObjCall(a, "getName", "name1", 2022).eval()
//使用 makeUnifiedObjCall 方法
makeUnifiedObjCall(a, "getName", ("name1", 2022)).eval()

其它工具函数

  • isInstanceOf(obj, cls)obj 为 OOP 对象,cls 为类。

该函数用于检查对象是否为特定类或该类的子类实例,返回一个布尔值。
class B {
        def B() {}
}

class D : B {
        def D() {}
}
class A {
        def A() {}
}

d = D()

isInstanceOf(d, D)  // true
isInstanceOf(d, B)  // true
isInstanceOf(d, A)  // false
  • setAttr(obj, attrName, value)obj 为 OOP 对象;attrName 为要设置的属性名称;value 为要设置的属性值。

该函数用于设置或修改对象的属性值。例如 setAttr(obj, `alpha, 16) 或者 obj.setAttr(`alpha, 16)