函数的函子语法`map`不起作用?
functor syntax `map` for function does not work?
我似乎无法用猫 "org.typelevel" %% "cats-core" % "1.0.0-MF"
编译它,而用 "org.typelevel" %% "cats-core" % "0.9.0",
就可以了。
import cats._
import cats.instances.all._
import cats.syntax.all._
val func1 = (x: Int) => x.toDouble
val func2 = (y: Double) => y * 2
val func3 = func1.map(func2)
func3(3)
错误是:
Error:(7, 25) value map is not a member of Int => Double
lazy val func3 = func1.map(func2)
^
我认为您正在寻找的可能只是函数组合。你可以这样做:
val func3 = func1 andThen func2
或
val func3 = func2 compose func1
但是,如果您想映射函数,则需要启用 partial-unification
。
最简单的方法是添加 sbt-partial-unification
plugin.
如果您使用的是 Scala 2.11.9 或更新版本,您还可以简单地添加编译器标志:
scalacOptions += "-Ypartial-unification"
使用其中任何一个都可以正常编译:
val func1 = (x: Int) => x.toDouble
val func2 = (y: Double) => y * 2
val func3 = func1.map(func2)
我似乎无法用猫 "org.typelevel" %% "cats-core" % "1.0.0-MF"
编译它,而用 "org.typelevel" %% "cats-core" % "0.9.0",
就可以了。
import cats._
import cats.instances.all._
import cats.syntax.all._
val func1 = (x: Int) => x.toDouble
val func2 = (y: Double) => y * 2
val func3 = func1.map(func2)
func3(3)
错误是:
Error:(7, 25) value map is not a member of Int => Double
lazy val func3 = func1.map(func2)
^
我认为您正在寻找的可能只是函数组合。你可以这样做:
val func3 = func1 andThen func2
或
val func3 = func2 compose func1
但是,如果您想映射函数,则需要启用 partial-unification
。
最简单的方法是添加 sbt-partial-unification
plugin.
如果您使用的是 Scala 2.11.9 或更新版本,您还可以简单地添加编译器标志:
scalacOptions += "-Ypartial-unification"
使用其中任何一个都可以正常编译:
val func1 = (x: Int) => x.toDouble
val func2 = (y: Double) => y * 2
val func3 = func1.map(func2)