在某些情况下,信号 (Int, Int) 未被识别为 (Int, Int) 元组
Signal (Int, Int) not recognised as (Int, Int) tuple in some cases
根据 return 类型,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),而在第二种情况下,它会导致类型错误。
有什么想法吗?
我完全没有使用榆树的经验,但是:
Signal.map
将函数映射到信号,这并不意味着函数以 Signal
作为参数调用,而是以信号的参数作为参数调用。例如对于 Signal(Int, Int)
,您映射一个接收 (Int, Int)
作为参数的函数。
所以在下面的情况下你没有问题
Signal.map relativeMouse Mouse.position
但是,在下面的例子中,您调用的函数期望 (Int, Int)
且参数 Signal(Int, Int)
是错误的:
relativeMouseTuple Mouse.position
你应该做的,可能是像这样将你的函数映射到信号:
Signal.map relativeMouseTuple Mouse.position
根据 return 类型,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),而在第二种情况下,它会导致类型错误。
有什么想法吗?
我完全没有使用榆树的经验,但是:
Signal.map
将函数映射到信号,这并不意味着函数以 Signal
作为参数调用,而是以信号的参数作为参数调用。例如对于 Signal(Int, Int)
,您映射一个接收 (Int, Int)
作为参数的函数。
所以在下面的情况下你没有问题
Signal.map relativeMouse Mouse.position
但是,在下面的例子中,您调用的函数期望 (Int, Int)
且参数 Signal(Int, Int)
是错误的:
relativeMouseTuple Mouse.position
你应该做的,可能是像这样将你的函数映射到信号:
Signal.map relativeMouseTuple Mouse.position