如何在REPL中检索Scala的版本?

soc*_*soc 21 scala

当试图在在线口译员或IRC机器人中运行一些代码时,我总是想知道他们支持哪种版本的Scala.

有没有办法从解释器中检索Scala的版本?

Dan*_*ral 31

用途scala.util.Properties.versionString:

scala> scala.util.Properties.versionString
res0: String = version 2.11.5
Run Code Online (Sandbox Code Playgroud)


Deb*_*ski 6

scala> scala.util.Properties.versionMsg
res: String = Scala library version 2.9.0.1 -- Copyright 2002-2011, LAMP/EPFL
Run Code Online (Sandbox Code Playgroud)

看起来当然像图书馆版本而不是语言版本,但我认为目前在实践中不会有真正的区别.


Dmi*_*rii 6

如果你想获得准确的Scala 3版本,可以从Manifest文件中读取
.../scala3-library_3-3.0.1.jar!/META-INF/MANIFEST.MF

import java.io.FileInputStream
import java.util.jar.JarInputStream

val scala3LibJar = classOf[CanEqual[_, _]].getProtectionDomain.getCodeSource.getLocation.toURI.getPath
val manifest = new JarInputStream(new FileInputStream(scala3LibJar)).getManifest
manifest.getMainAttributes.getValue("Implementation-Version")
Run Code Online (Sandbox Code Playgroud)

Scastie 中的示例:

在此输入图像描述


Can*_*Can 5

如果您只需要版本号而不需要“version”关键字,则可以使用versionNumberString函数。

scala> scala.util.Properties.versionNumberString
res1: String = 2.12.3
Run Code Online (Sandbox Code Playgroud)