有人告诉我Haskell没有变量而是绑定.现在这意味着什么,我总是想知道在编写这些绑定时有什么区别,如下所示:
x = 5
Run Code Online (Sandbox Code Playgroud)
和
let x = 5
Run Code Online (Sandbox Code Playgroud)
这有什么区别?
还有一个后续问题:我是否通过这样做创建变量?如果x不是变量,它是什么?
我有一个函数,它只是为任何给定的函数f切换两个参数的顺序,如下所示:
flippingArguments f a b = f b a
Run Code Online (Sandbox Code Playgroud)
当我用:t检查flippingArguments的类型时,我得到以下内容:
flippingArguments :: (t -> t1 -> t2) -> t1 -> t -> t2
Run Code Online (Sandbox Code Playgroud)
我不明白.我会预测以下(这是错误的):
flippingArguments :: (t -> t1 -> t2) -> t -> t2 -> t1
Run Code Online (Sandbox Code Playgroud)
也许我误解了如何在Haskell中读取类型规范?我理解它的方式是第一个括号(t - > t1 - > t2)表示flippingArguments参数,其中t是f,t1是a,t2是b,以下三个t - > t2 - > t1是flippingArguments返回简单地翻转t1和t2的顺序的值.但这是错误的.
我来自Java,所以请原谅我,如果我不明白这里的返回值是什么,它可能是非常基本的东西.重申一下,有人可以向我解释一下flippingArguments的类型符号吗?
我试图将动态数组的地址分配给另一个动态数组,即我有两个指针的地址:
Someclass *pointer = new Someclass[10];
Someclass *pointer2 = new Someclass[10];
Run Code Online (Sandbox Code Playgroud)
我现在想要将指针的地址分配给pointer2:
pointer2 = pointer;
Run Code Online (Sandbox Code Playgroud)
测试以查看地址是否相同:
cout << &pointer2 << endl;
cout << &pointer << endl;
Run Code Online (Sandbox Code Playgroud)
我的输出:
0x28fed4
0x28fb98
Run Code Online (Sandbox Code Playgroud)
所以他们的地址不一样.是什么赋予了?我不是只是通过输入pointer2 = pointer将它们分配到同一个地址吗?如果没有,那么这个陈述是做什么的?
我试着用一个没有类和对象的简单程序来做这件事:
int main()
{
int * pointer1;
int * pointer2;
pointer1 = pointer2;
cout << &pointer1 << endl;
cout << &pointer2 << endl;
}
Run Code Online (Sandbox Code Playgroud)
它是一样的,他们的地址仍然不同?这可能是我误解的基本内容,有人可以清理它吗?谢谢.
我有一个名为Car的抽象类.然后我有两个子类,福特和道奇,它们都扩展了Car.这些子类中的每一个都有一个名为move()的方法.这个方法中的代码对于Ford和Dodge来说是相同的,所以我的本能就是把这个方法实现抛给Car超类,所以我不必在我的两个子类中都有两次相同的代码,即得到重复的代码,只是将此方法在超类内的代码中写出一次,每个子类可以在需要时调用它.
现在这是我的......事情:在每个子类的移动方法中,每个子类的实例变量都被操纵.所以你看,即使代码是相同的,每个move()中发生的事情 - 方法取决于特定子类的实例变量的状态.像这样:
abstract class Car {
// I want to put move()-method in here and erase it from subclasses
}
class Ford extends Car {
private int rpm;
public void move(){
dosomestuff + rpm // value of rpm being used here is unique to Ford
}
}
class Dodge extends Car {
private int rpm;
public void move(){
dosomestuff + rpm // value of rpm being used here is unique to Dodge
}
}
Run Code Online (Sandbox Code Playgroud)
我希望像这样,并使用子类实例变量从每个子类的超类中调用move():
abstract class Car …Run Code Online (Sandbox Code Playgroud)