如何正确使用scala类型或选项
我是scala的新手。我的理解是,scala不鼓励使用try、catch、finally block。相反,它提升了如何正确使用scala类型或选项,scala,Scala,我是scala的新手。我的理解是,scala不鼓励使用try、catch、finally block。相反,它提升了选项,尝试和其中一种类型 我想了解在下面的情况下如何正确使用它们 读取属性文件的函数 def getSourcePath(properties: Properties): Path = { val dataFileURI: String = properties.getProperty("dataFileURI") val srcPath = new Path(
选项
,尝试
和其中一种类型
我想了解在下面的情况下如何正确使用它们
读取属性文件的函数
def getSourcePath(properties: Properties): Path = {
val dataFileURI: String = properties.getProperty("dataFileURI")
val srcPath = new Path(dataFileURI)
srcPath
}
使用getSourcePath中的值的函数
def getSourcePath(properties: Properties): Path = {
val dataFileURI: String = properties.getProperty("dataFileURI")
val srcPath = new Path(dataFileURI)
srcPath
}
val srcPath=getSourcePath(属性)
def getDataFileName(srcPath:Path,audited:String):String={
val-dataFileName:String=srcPath.getName+“933;”+audit
数据文件名
}
GetSourcePath,返回
def getSourcePath(properties: Properties): Path = {
val dataFileURI: String = properties.getProperty("dataFileURI")
val srcPath = new Path(dataFileURI)
srcPath
}
def getSourcePath(属性:属性):或者[FileSystemError,Path]={
试一试{
val dataFileURI:String=properties.getProperty(“dataFileURI”)
val srcPath=新路径(dataFileURI)
右(srcPath)
}抓住{
案例异常:异常=>左侧(FileSystemError(“无法获取数据文件URI”))
}
获取数据文件名以使用其中一个。
def getSourcePath(properties: Properties): Path = {
val dataFileURI: String = properties.getProperty("dataFileURI")
val srcPath = new Path(dataFileURI)
srcPath
}
def getDataFileName(srcPath:other[FileSystemError,Path],audited:String):other[FileSystemError,String]={
路径匹配{
案例右侧(srcPath)=>Right(srcPath.getName+“\ux”+auditd)
案例左侧(srcPath)=>左侧(srcPath)
}
}
然而,这就像在方法中进一步传递异常一样。如果我有3-4个参数,那么对每个参数进行模式匹配看起来有些过分
似乎我还没有完全理解这种类型。下面是我将如何编写代码。我将使用Try monad,因为它是最简洁的。两者都可以工作,但您必须使用显式错误类型,这会使事情更加冗长。因此我将坚持使用Try
def getSourcePath(properties: Properties): Try[Path] =
Try(new Path(properties.getProperty("dataFileURI")))
def getDataFileName(srcPath: Try[Path], auditID: String): Try[String] =
srcPath.map(_.getName + "_" + auditID)
如果要转换为选项,请在从任一函数返回的Try monad上调用toOption
如果您对代码如何工作有疑问,我可以在注释部分回答。我将如何编写代码。我将使用Try monad,因为它是最简洁的。两者都可以工作,但您必须使用显式错误类型,这会使事情更加详细。因此我将坚持使用Try
def getSourcePath(properties: Properties): Try[Path] =
Try(new Path(properties.getProperty("dataFileURI")))
def getDataFileName(srcPath: Try[Path], auditID: String): Try[String] =
srcPath.map(_.getName + "_" + auditID)
如果要转换为选项,请在从任一函数返回的Try monad上调用toOption
如果您对代码如何工作有疑问,我可以在评论部分回答您想知道的确切内容我的意思是,monad是处理错误的更好方法,这取决于您将使用哪个monad取决于您的用例。如果您可能从某个db调用或API获得数据或空值,您可以使用选项s如果要捕获异常或值并传递它,可以使用ome或NoneEither@RamanMishra不是关于使用哪一个单子。而是关于如何有效地使用它。在这种情况下,如果我有5个参数,它们都是
或,我将不得不为所有这些参数编写模式匹配。这对我来说似乎有些过分。可能是因为我没有正确地使用它。你到底想知道什么我的意思是,monad是更好的处理错误的方法,这取决于你要使用哪个monad取决于你的用例。如果你有可能从某个数据库调用或API获取数据或空值,如果你想捕获异常或值,你可以使用选项some或None,然后传递你可以用它Either@RamanMishra不是关于使用哪一个单子。而是关于如何有效地使用它。在这个特殊的例子中,如果我有5个参数,它们都是或者,我将不得不为它们编写模式匹配。这对我来说似乎有些过分。可能是因为我没有正确地使用它。很高兴看到我可以在Try上使用map我不必使用模式匹配很高兴看到我可以在试用中使用map,这样我就不必使用模式匹配了