我正在设计一种编程语言,而我想要添加的一项功能是trampoline function和class
之间的交叉。也就是说,一个类似于generic class
接受type
的文字的类。我之所以坚持这个名字是因为我之前还没有用过某种语言,有什么东西已经意味着这个概念还是一些接近的东西?使用trampoline class
是一个选项,但是如果有更准确地描述这个或已经在另一种语言中使用的东西,我宁愿选择它来减少所需的术语数量在文档中。
如果从上面不清楚的话,下面是伪代码来说明这个原理:
class Point<const int n> {
private float[n] _value;
Point() {
for (int i = 0; i < n; i++) {
this._value[i] = 0f;
}
}
Point(Point<o> other) {
for (int i = 0; i < min(n, o); i++) {
this._value[i] = 0f;
}
}
public static float operator [index] (optional float value = null) {
if (value != null) { this._value[index] = value; }
return (this._value[index]);
}
public static Point<max(o, p)> operator + (Point<const int o> p1, Point<const int p> p2) {
Point<min(o, p)> small = (p1.n < p2.n ? p1 : p2);
Point<min(o, p)> large = (p1.n < p2.n ? p2 : p1);
Point<max(o, p)> ret = new Point<max(o, p)>(large);
for (int i = 0; i < min(o, p); i++) { ret[i] += small[i] }
return (ret);
}
}
答案 0 :(得分:1)
您正在寻找的术语是dependent types。这意味着类型不仅可以具有类型参数(如泛型),而且类型也可以使用任意值(依赖类型参数)进行参数化。例如,您可以定义一个带有数字n
的函数的签名,并返回一个长度为 if (window.localStorage.getItem("notVisited") == null){ //This initilizes a variable in localstorage
window.localStorage.setItem("notVisited","true");
}
var startListening = function() {
myFirebase.on('child_added', function(snapshot) {
var msg = snapshot.val();
var msgUsernameElement = document.createElement("b");
msgUsernameElement.textContent = msg.user;
var msgTextElement = document.createElement("p");
msgTextElement.textContent = msg.message;
var msgElement = document.createElement("div");
msgElement.appendChild(msgUsernameElement);
msgElement.appendChild(msgTextElement);
document.getElementById("messages").append(msgElement);
});
window.localStorage.setItem("notVisited","false");
}
if (window.localStorage.getItem("notVisited") == "true") {
startListening();
}
的数组。
可悲的是,依赖类型检查通常是不可判定的。这是因为在执行类型检查本身时,您必须计算相关类型参数的可能值的范围。要实际键入检查程序,您必须检查两段代码是否产生相同范围的可能值。这被称为扩展函数相等,这是已知通常不可判定的部分。
现在,如果只将编译时常量用作依赖类型参数,则依赖类型检查可能是可判定的。但是,我不确定。
在下面的评论中,我们发现似乎是依赖类型参数的部分实际上不应该用于类型检查。相反,它可以被视为一个隐含参数。它类似于Scala编程语言中的隐式参数传递。