Groovy打高尔夫球的秘诀


14

当我看到许多问题以他们感兴趣的语言询问打高尔夫球的技巧时,我决定询问我最喜欢的语言:Groovy。人们可以提供一些技巧和技巧,这些技巧和技巧将用于Groovy的高尔夫运动中。


1
好吧,这不是很受欢迎,是:-(
Armand

@Alison:我感到很难过,因为此站点上没有Groovy的高尔夫秘诀:(
蚂蚁

2
您有什么技巧可以开始我们吗?
Armand

Answers:


5

我是整个高尔夫运动的新手,这是我到目前为止得到的:

使用闭包不起作用:

def a(b){打印b}

超过

a = {打印}

您可以在数组和列表中使用负索引作为size()的别名-

c =“ abc”
d = [“ a”,“ b”,“ c”]

断言c [c.size()-1] == c [-1]
断言c [c.size()-2] == c [-2]
断言d [d.size()-1] == d [-1]
断言d.last()== d [-1]

点差运算符是收集的快捷方式:

断言d * .size()== d.collect {it.size()}

要进行分类,请使用飞船运算符:

e = [54,5,12]
assert e.sort{a,b->a<=>b}==e.sort{a,b->a<b?-1:+1}
assert e.sort{a,b->a<=>b}==e.sort{a,b->if (a>b) {return(-1)} else {return(+1)}}

编辑转换:

assert "123" as int == "123".toInteger()

如果在一些令人讨厌的事情上,点*.X差算子通常可以写成.X
cfrick

3

由于Groovy是一种较为冗长的语言,因此可以使用Groovys MOP来缩短方法调用。

例如,以下代码段将在第四次使用后获得回报:

''.metaClass.r<<{i->(int)Math.random()*i}
''.r(12)

打高尔夫球的技巧

0.metaClass.r<<{i->(int)Math.random()*i}
0.r(12)

或者,您知道:

r={(int)Math.random()*it}
r(12)

2

grep 很短,可以解决几个问题

以带空格且不带前导元素的列表形式获取字符串的字符:'ABC XYZ'.grep()返回[A, B, C, , X, Y, Z]

的grep与正则表达式是比转换为大写,如果需要的话shorther:it.grep(~/(?i)$c/)代替it.toUpperCase().grep(c)


1
'ABC XYZ'as Set是一个短字符,并且在大多数相同的地方都可以使用
Marty Neal

2

从对象列表中获取数组

如果您有以下对象列表:

def users = [[user:'A',id:1],[user:'B',id:2],[user:'C',id:3]]

您可以使用以下方法生成具有特定属性的ArrayList:

def userIds = users*.id // [1, 2, 3] no explicit loops!

奖金:Groovy ...在Rails上!

好吧,在Grails框架中,我们必须从具有multiple属性select中获得许多值。您可以使用循环,展平和其他编程更典型的结构,但可以节省一些行。如果您有类似的选择:

<select id="users" multiple="true" name="users">
    <option value="193">User A</option>
    <option value="378">User B</option>
    <option value="377">User C</option>
</select><%-- No Grails tags for now --%>

然后,在您的控制器中,您可以简单地编写:

def aListOfUsers = User.getAll(params.list('userIds'))

1
这个问题会接受Grails打高尔夫球的技巧吗?我承认我害怕狙击手...
Victor F

2
不要害怕,PCG充满了非常友善的人:)
Beta Decay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.