1

根据返回类型,Signal (Int, Int) 不会被识别为 (Int, Int) 的元组。

考虑以下代码:

import Graphics.Element exposing (..)
import Mouse


relativeMouseElement : (Int, Int) -> Element
relativeMouseElement mp = show (fst mp - 1000, snd mp - 1000)


relativeMouseTuple : (Int, Int) -> (Int, Int)
relativeMouseTuple mp = (fst mp - 1000, snd mp - 1000)

main =
--  Signal.map relativeMouse Mouse.position
    relativeMouseTuple Mouse.position

Signal.map relativeMouse Mouse.position工作得很好,向浏览器显示 (-1000, -1000) 并根据鼠标移动调整值。

relativeMouseTuple Mouse.position这虽然不起作用。我得到的并发症错误如下:

Function `relativeMouseTuple` is expecting the argument to be:

    ( Int, Int )

But it is:

    Signal ( Int, Int )

我觉得这很奇怪。在这两种情况下,第一个参数都是 Signal (Int, Int),在第二种情况下,它会导致类型错误。

有任何想法吗?

4

1 回答 1

5

但是,我根本没有使用榆树的经验:

Signal.map将函数映射到信号,这并不意味着函数以Signal作为参数调用,而是以信号的参数作为参数调用。例如,为Signal(Int, Int)您映射一个接收(Int, Int)作为参数的函数。

所以在以下情况下你没有问题

Signal.map relativeMouse Mouse.position

然而,在下面的例子中,你调用了一个期望(Int, Int)参数Signal(Int, Int)错误的函数:

relativeMouseTuple Mouse.position

您应该做的可能是将您的函数映射到 Signal,如下所示:

Signal.map relativeMouseTuple Mouse.position
于 2015-12-10T13:43:47.850 回答