有人可以解释Scala,Groovy和Clojure之间的主要区别.我知道这些编译中的每一个都在JVM上运行,但我想在它们之间进行简单的比较.
我需要从文件系统中读取一个文件并将整个内容加载到一个groovy控制器中的字符串中,最简单的方法是什么?
我有一个String表示整数值,并希望将其转换为int.是否有一个常规的Java相当于Integer.parseInt(String)?
我将通过例子解释:
猫王运营商(?:)
"Elvis运算符"是Java三元运算符的缩写.这方面的一个实例是,如果表达式解析为false或null,则返回"合理的默认值".一个简单的例子可能如下所示:
def gender = user.male ? "male" : "female" //traditional ternary operator usage
def displayName = user.name ?: "Anonymous" //more compact Elvis operator
Run Code Online (Sandbox Code Playgroud)
安全导航操作员(?.)
安全导航操作符用于避免NullPointerException.通常,在引用对象时,可能需要在访问对象的方法或属性之前验证它是否为null.为了避免这种情况,安全导航操作符将只返回null而不是抛出异常,如下所示:
def user = User.find( "admin" ) //this might be null if 'admin' does not exist
def streetName = user?.address?.street //streetName will be null if user or user.address is null - no NPE thrown
Run Code Online (Sandbox Code Playgroud) 我试图groovysh在Windows 8上打开Groovy Shell()并得到以下输出:
java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs
at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
Run Code Online (Sandbox Code Playgroud)
打印完上述消息后,shell按预期启动.
我在Jenkinsfile(Groovy)上有这样的东西,我想在变量中记录stdout和退出代码,以便稍后使用这些信息.
sh "ls -l"
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做,特别是因为你似乎无法在里面运行任何类型的groovy代码Jenkinsfile?
在下面的一段代码中(取自Groovy Semantics Manual页面),为什么要使用关键字为赋值添加前缀def?
def x = 0
def y = 5
while ( y-- > 0 ) {
println "" + x + " " + y
x++
}
assert x == 5
Run Code Online (Sandbox Code Playgroud)
该def关键字可以被删除,这个片段将产生相同的结果.那么关键字的效果是def什么?
在groovy中确定数据类型的最佳方法是什么?
如果它是日期等,我想以不同的方式格式化输出.
我有一个非常简单的任务,我想在Groovy中做,但似乎无法让它工作.我只是试图循环遍历groovy中的地图对象并打印出键和值,但这段代码不起作用.
// A simple map
def map = [
iPhone : 'iWebOS',
Android: '2.3.3',
Nokia : 'Symbian',
Windows: 'WM8'
]
// Print the values
for (s in map) {
println s + ": " + map[s]
}
Run Code Online (Sandbox Code Playgroud)
我试图让输出看起来像这样:
iPhone: iWebOS
Android: 2.3.3
Nokia: Symbian
Windows: WM8
Run Code Online (Sandbox Code Playgroud)
有人可以详细说明如何做到这一点?
Groovy添加了execute方法,String使执行shell相当容易;
println "ls".execute().text
Run Code Online (Sandbox Code Playgroud)
但如果发生错误,则没有结果输出. 是否有一种简单的方法可以同时获得标准错误和标准错误? (除了创建一堆代码;创建两个线程来读取两个输入流,然后使用父流等待它们完成然后将字符串转换回文本?)
有类似的东西会很高兴;
def x = shellDo("ls /tmp/NoFile")
println "out: ${x.out} err:${x.err}"
Run Code Online (Sandbox Code Playgroud) groovy ×10
clojure ×1
dictionary ×1
file ×1
groovyshell ×1
javascript ×1
jenkinsfile ×1
jquery ×1
keyword ×1
scala ×1
types ×1
windows ×1