小编use*_*939的帖子

在Haskell中,使用和不使用let有什么区别?

有人告诉我Haskell没有变量而是绑定.现在这意味着什么,我总是想知道在编写这些绑定时有什么区别,如下所示:

x = 5
Run Code Online (Sandbox Code Playgroud)

let x = 5
Run Code Online (Sandbox Code Playgroud)

这有什么区别?

还有一个后续问题:我是否通过这样做创建变量?如果x不是变量,它是什么?

haskell

8
推荐指数
2
解决办法
568
查看次数

切换参数顺序的函数的类型是什么?

我有一个函数,它只是为任何给定的函数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的类型符号吗?

haskell types

2
推荐指数
1
解决办法
90
查看次数

将指针值分配给另一个指针值.我做错了吗?

我试图将动态数组的地址分配给另一个动态数组,即我有两个指针的地址:

 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)

它是一样的,他们的地址仍然不同?这可能是我误解的基本内容,有人可以清理它吗?谢谢.

c++ pointers

1
推荐指数
1
解决办法
70
查看次数

如何在超类中与实例变量共享方法?

我有一个名为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)

java

1
推荐指数
1
解决办法
139
查看次数

标签 统计

haskell ×2

c++ ×1

java ×1

pointers ×1

types ×1