我正在为课堂编写多米诺骨牌游戏而无法绕过自定义类型。我有:
fn lazy_slice(n: i64) {
let array = [1i64, 2, 3, 4, 5];
let mut iter: Box<Iterator<Item = i64>> = Box::new(array.iter().cloned());
for _ in 0..n {
iter = Box::new(iter.map(|x| x + 1));
}
println!("{:?}", iter.collect::<Vec<_>>());
}
尝试加载这会给我带来错误:
Dominoes.hs:43:3:错误:
•无法匹配预期类型'(Int,Hand,Board)' 实际类型'Board - &gt; (Int,b0,Board)'
•'playTurn'的等式有两个参数, 但它的类型'DomsPlayer - &gt; (Int,Hand,Board)'只有一个
| 43 | playTurn hand1 board1 =(得分,hand2,board2)| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...
Dominoes.hs:44:37:错误:
•无法匹配类型'手 - &gt;董事会 - &gt; (多米诺,结束)' 用'[Domino]'
预期类型:手 实际类型:DomsPlayer
•可能的原因:'hand1'适用于太少的参数
在'simplePlayer'的第一个参数中,即'hand1'
在表达式中:simplePlayer hand1 board1
在模式绑定中:(dom,end)= simplePlayer hand1 board1
| 44 | where(dom,end)= simplePlayer hand1 board1 |
如何从DomsPlayer中检索值?
答案 0 :(得分:0)
如果将此DomsPlayer
替换为其定义
type DomsPlayer = Hand -> Board -> (Domino,End)
playTurn :: (Hand -> Board -> (Domino,End)) -> (Int, Hand, Board)
你会看到playTurn只收到一个参数,而不是两个参数。
我不知道你要做什么,但显然你需要将Hand
和Board
作为单独的参数接收:
playTurn :: Hand -> Board -> ... -> (Int, Hand, Board)
我也不知道,也许也会传递DomsPlayer
类型的函数,并将其应用于那些单独的参数。
但这是你的错误。