小编Onl*_*ies的帖子

如何为具有不同构造函数Haskell的类型实例化Eq(或任何类)

我对此事有疑问.

如果我有这种类型:

data Person = Person {name :: String, age :: Int} 

data Example = Constructor1 Integer | Constructor2 Person
Run Code Online (Sandbox Code Playgroud)

我想为Example实例化Eq类

instantiate Eq Example where
(==) (Constructor1 e1) (Constructor1 e2) = e1 ==e2
(==) (Constructor2 e1) (Constructor2 e2) = e1 == e2
Run Code Online (Sandbox Code Playgroud)

我们可以假设我已经为Person实例化了Eq类,所以我可以将Person与Person进行比较.

这是实例化具有多个构造函数的类的方法吗?

还有其他疑问.我应该在Constructor1和Constructor2之间添加一个比较.我不这么认为,因为他们可能来自不同的类型.

我在谈论类似这样的东西:

(==) (Constructor1 e1) (Constructor2 e2) == "no idea how to compare Person with Int"
Run Code Online (Sandbox Code Playgroud)

谢谢!

haskell

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

Java Scanner 在空行后停止读取

我正在看这个话题,我发现这个Java 在空行后停止阅读

我对在我之前引用的另一个 StackOverflow 页面中编写的下一个代码有疑问:

while (!sc.nextLine().equals("")){
    text[i] = sc.nextLine();
    i++;        
}
Run Code Online (Sandbox Code Playgroud)

我使用类似的东西来测试它,这是这段代码:

List<String> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
while(!scanner.nextLine().equals(""))
{
    list.add(scanner.nextLine());
}
list.forEach(s -> System.out.println(s));
Run Code Online (Sandbox Code Playgroud)

所以这个想法是,读取一些输入(字符串)将它们存储到一个列表中,当该行为空时停止循环。

但是这个输入的结果:

1 2 3 4

这是输出:

2 4

当然,我期待这一点,因为当您在 while 语句中进行比较时,您会调用 nextLine 方法。所以下次你调用它时,进入 while,你会调用第二个,所以下一行。

我在看是否有人知道解决这个问题的好方法?因此,您正在读取输入,存储它们,如果该行为空,则停止循环。

谢谢你。

java loops input while-loop

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

标签 统计

haskell ×1

input ×1

java ×1

loops ×1

while-loop ×1