Scala 我应该如何从表格A中获取B=>;B
我是Scala的新手,我遇到了这种奇怪的情况Scala 我应该如何从表格A中获取B=>;B,scala,functional-programming,Scala,Functional Programming,我是Scala的新手,我遇到了这种奇怪的情况 defbar[A,B](隐式foo:A=>B):B={ //做点什么 福 } 然后我得到了这样的错误 require B but found A => B 我应该如何从表格A=>B中得到B 这就是我这样做的原因,我有两个功能: def funcA:String={ def getStrA:String=“A” //那么这两个函数中的操作是相同的 尝试{}匹配{ 案例成功()=>getStrA case Failure()=>//两个函数中的
defbar[A,B](隐式foo:A=>B):B={
//做点什么
福
}
然后我得到了这样的错误
require B but found A => B
我应该如何从表格A=>B中得到B
这就是我这样做的原因,我有两个功能:
def funcA:String={
def getStrA:String=“A”
//那么这两个函数中的操作是相同的
尝试{}匹配{
案例成功()=>getStrA
case Failure()=>//两个函数中的错误处理程序完全相同
}
}
def funcB:Int={
def剂量测量(x:Int):Int={
//做点什么
x/1
}
val x=1
尝试{}匹配{
案例成功()=>doSomething(1)
case Failure()=>//两个函数中的错误处理程序完全相同
}
}
以下是我想要实现的目标
def funcA:String={
隐式def getStrA:String=“A”
酒吧
}
def funcB:Int={
val x=1
隐式def剂量测量(x:Int):Int={
//做点什么
x/1
}
酒吧
}
定义栏[A,B](隐式foo:A=>B):B={
尝试{}匹配{
案例成功()=>foo
case Failure()=>//两个函数中的错误处理程序完全相同
}
}
您有一个从a
到B
的转换。您需要返回B
。唯一的方法是将A
传递到函数中。此签名隐含一个假设,即您有一些有效的A
值(很可能是硬编码的),您将始终在此处使用该值
def bar[A, B](implicit foo: A => B): B = {
val a: A = ... // hmm...
foo(a)
}
考虑到A
是参数化的,那么您要么缺少一些信息,要么无法创建此A
(它不能是null
,因为并非所有类型都可以将null
作为值),因此在这种情况下可能需要抛出异常。您可能缺少一些A
提供程序,或者应该始终使此操作失败
更新:
在代码中根本不需要使用隐式:
def bar[B](f: onSuccess: A => B) =
Try{ some operations } match {
case Success(value) => onSuccess(value)
case Failure(_) => // error handler
}
def funcA = bar(_ => "A")
def funcB = bar(_ => 1)
调用
foo(),如果不能,那么就不能创建B
。但是我仍然需要A
参数化,并且我不想显式地将此A
传递给bar
。我该怎么做。以隐式方式传递A
。2). 这是一个非常过分内化的anty模式,因为代码中不需要隐式。使用高阶函数可以更清晰地实现所有内容。我发布了一个更新示例。如果它仍然对您没有帮助,请创建一个Scastie,其中包含原始代码的工作示例以及所有签名。