嵌套函数中的类型不匹配
type mismatch in nested functions
Objective:-
从 aws s3 存储桶中检索 json 对象。失败重试。
如果重试次数已用尽,请将错误消息发送到 azure 的事件中心。
//重试函数
def retry[T](n: Int, id: String)(fn: => T): Option[T] = {
Try(fn) match {
case Success(x) => Some(x)
case Failure(e) => {
Thread.sleep(1000)
if (n > 1) {
retry(n - 1, id)(fn)
} else {
val eMessage = "TransactionId =" + id + " : ".concat(e.toString())
SendMessage(eMessage, event_hub_client)
None
}
}
}
}
//从aws s3 bucket
中获取对象的主要函数(上面有重试)
def getS3Object(s3ObjectName: String, s3Client: AmazonS3, evtClient: EventHubClient): String = {
retry(2,s3ObjectName) {
val inputS3Stream = s3Client.getObject("my_s3_bucket", s3ObjectName).getObjectContent
val inputS3String = IOUtils.toString(inputS3Stream, "UTF-8")
return inputS3String
}
}
我收到以下编译失败消息:-
错误:类型不匹配
发现:选项[无]
必填:字符串
retry2(2,s3ObjectName)
如何声明retry和main函数的return类型使其匹配?
就类型而言 retry
看起来还不错。你需要调整你的其他方法。
将其设为 return Option[String]
或使用 getOrElse(..)
如果您想回退到其他值。
def getS3Object(s3ObjectName: String, s3Client: AmazonS3, evtClient: EventHubClient): Option[String] = {
retry(2,s3ObjectName) {
val inputS3Stream = s3Client.getObject("my_s3_bucket", s3ObjectName).getObjectContent
val inputS3String = IOUtils.toString(inputS3Stream, "UTF-8")
inputS3String
}
}
请注意删除了 return
关键字,该关键字没有用,而且与您认为的不同(我会让您自己搜索该主题)。
Objective:- 从 aws s3 存储桶中检索 json 对象。失败重试。 如果重试次数已用尽,请将错误消息发送到 azure 的事件中心。
//重试函数
def retry[T](n: Int, id: String)(fn: => T): Option[T] = {
Try(fn) match {
case Success(x) => Some(x)
case Failure(e) => {
Thread.sleep(1000)
if (n > 1) {
retry(n - 1, id)(fn)
} else {
val eMessage = "TransactionId =" + id + " : ".concat(e.toString())
SendMessage(eMessage, event_hub_client)
None
}
}
}
}
//从aws s3 bucket
中获取对象的主要函数(上面有重试) def getS3Object(s3ObjectName: String, s3Client: AmazonS3, evtClient: EventHubClient): String = {
retry(2,s3ObjectName) {
val inputS3Stream = s3Client.getObject("my_s3_bucket", s3ObjectName).getObjectContent
val inputS3String = IOUtils.toString(inputS3Stream, "UTF-8")
return inputS3String
}
}
我收到以下编译失败消息:-
错误:类型不匹配
发现:选项[无]
必填:字符串
retry2(2,s3ObjectName)
如何声明retry和main函数的return类型使其匹配?
就类型而言 retry
看起来还不错。你需要调整你的其他方法。
将其设为 return Option[String]
或使用 getOrElse(..)
如果您想回退到其他值。
def getS3Object(s3ObjectName: String, s3Client: AmazonS3, evtClient: EventHubClient): Option[String] = {
retry(2,s3ObjectName) {
val inputS3Stream = s3Client.getObject("my_s3_bucket", s3ObjectName).getObjectContent
val inputS3String = IOUtils.toString(inputS3Stream, "UTF-8")
inputS3String
}
}
请注意删除了 return
关键字,该关键字没有用,而且与您认为的不同(我会让您自己搜索该主题)。