我是Groovy的新手,所以我对该语言的运行时绑定,类型化和非类型化属性感到困惑。我个人更喜欢宣布类型。
但是,我有一个问题。
我有一个小方法,从地图,输入,等等,我知道是数字的变量。让我们说我不知道初始类型是什么(它在代码的某个深处或来自外部源),另一个是它是一个数字。现在我有一个方法,它接受其中两个参数,我必须对它们进行模运算。因为它们可能是十进制的,所以我使用BigDecimal的其余部分编写了一个小方法,以强制执行我在方法签名上使用类型BigDecimal的类型。
def callerMethod(Map map) {
...
map.each{
calledMethod(it.val1, it.val2)
...
}
...
}
def calledMethod(BigDecimal val1, BigDecimal val2) {
...
vl1.remainder(val2)
...
}
这是对的吗?如果传入的参数是Integer(如果我理解正确的话,大多数时候基元被装箱),它是否会被隐式转换或变成BigDecimal?
这在Groovy中是如何工作的。
我仍然认为既然我可以选择使用类型,我想使用它们而不是声明一切def。如果您阅读现有代码,它还可以更容易地阅读代码或查看内容是什么
答案 0 :(得分:0)
此方法中的问题不是变量的类型,而是每个地图
在一个时髦的地图中,每个都有两个签名。 一个接收参数的Map.Entry和其他接收键和值
例:
Map map = [key1:'value1',key2:'value2']
map.each{ Map.Entry entryMap ->
println "The value of key: ${entryMap.key} is ${entryMap.value}"
}
每个的结果都是:
The value of key: key1 is value1
The value of key: key2 is value2
或者可能是这样的
Map map = [key1:'value1',key2:'value2']
map.each{ def key, def value ->
println "The value of key: ${key} is ${value}"
}
第二个结果与第一个结果相同。
如果你想把两个特定的参数传递给你叫做方法,那么把它们传递到每个参数之外:
def callerMethod(Map map) {
calledMethod(map.val1, map.val2)
}
我不完全理解你想要的东西......我希望能帮助你做代码。