Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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实用程序函数的好方法是什么。这里的重点是非常简单的独立功能,如: def toBinary(i: Int, digits: Int = 8) = String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0') def concat(ss: String*) = ss filter (_.nonEmpty) mkString ", " concat: (ss: String*)St

跨项目收集和使用有用的Scala实用程序函数的好方法是什么。这里的重点是非常简单的独立功能,如:

def toBinary(i: Int, digits: Int = 8) =
    String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')

def concat(ss: String*) = ss filter (_.nonEmpty) mkString ", "
concat: (ss: String*)String

这个问题很基本,我知道;-)但是,我明白了做某事总有一个最佳的方法。例如,重用Scala interactive shell、Idea、Eclipse中的代码,使用或不使用SBT,在GitHub上安装库,等等,可以很快为这样一个简单的问题引入最优和非最优的方法。

您可能希望将这些方法放在一个简单的环境中

您还可以将它们放在普通的
对象中
,并在需要这些方法时导入对象中的所有内容

object Utilities {
  def toBinary(i: Int, digits: Int = 8) = // ...
}

// Import everything in the Utilities object
import Utilities._

如果您希望从任何地方都可以轻松地访问它,那么最好的办法就是将它放在scala库jar中。就我个人而言,我在
/jvm/S.jar
(或类似的东西)中有我所有的自定义内容,并在每次需要时将其添加到类路径中


重新打包Scala库jar非常简单——将其解压缩,移入类层次结构,然后重新打包。(您应该将它放在某个包和/或包对象中。)

好的,您可以这样做,但我认为将它放在Scala库JAR中不是一个好主意。然后您就可以制作自己的Scala扩展版本了。您很容易就会忘记哪些方法不是标准Scala的一部分,您的程序也不会在没有Scala库JAR修补版本的其他人的计算机上运行。@Jesper-没那么糟糕;您仍然需要导入自己的包或对象。这只是一种简便的方法,可以避免修复六个不同的工具,以便它们使用正确的类路径。(我通常会修理工具,但仍然…)谢谢雷克斯。这是一个有趣的方法。此操作的结果与SBT中的“发布本地”命令相比如何?我还在学习,但我想如果我通过SBT使用它,那么它通常无法通过Scala交互式shell访问?使用将所有东西都放在一个对象中的方法可以吗,还是有点小技巧?@JacobusR-将所有东西放在一个对象中是典型的(见Jesper的答案)。我并不真正使用SBT,所以我不确定publish local除了SBT本身还有什么作用,如果有的话。谢谢。到目前为止,我确实把我的实用函数放在了一个对象中。我只是想确保这是一个好方法,如果我使用这种方法不会受到任何惩罚(性能灵活性或其他方面)。