Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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类型或选项_Scala - Fatal编程技术网

如何正确使用scala类型或选项

如何正确使用scala类型或选项,scala,Scala,我是scala的新手。我的理解是,scala不鼓励使用try、catch、finally block。相反,它提升了选项,尝试和其中一种类型 我想了解在下面的情况下如何正确使用它们 读取属性文件的函数 def getSourcePath(properties: Properties): Path = { val dataFileURI: String = properties.getProperty("dataFileURI") val srcPath = new Path(

我是scala的新手。我的理解是,scala不鼓励使用try、catch、finally block。相反,它提升了
选项
尝试
和其中一种类型

我想了解在下面的情况下如何正确使用它们

读取属性文件的函数

  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,这样我就不必使用模式匹配了