Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 我应该如何从表格A中获取B=>;B_Scala_Functional Programming - Fatal编程技术网

Scala 我应该如何从表格A中获取B=>;B

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()=>//两个函数中的

我是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()=>//两个函数中的错误处理程序完全相同
}
}
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,其中包含原始代码的工作示例以及所有签名。