首页 文章

将def变量传递给Groovy中的类型化BigDecimal参数

提问于
浏览
0

我是Groovy的新手,所以我对该语言的运行时绑定,类型化和非类型化属性感到困惑 . 我个人更喜欢声明类型 .

但是,我有一个问题 .

我有一个小方法,从 Map ,输入,等等,我知道数字的变量 . 假设我不知道初始类型是什么(它在代码深处或者来自外部源),另一种是它是一个数字 . 现在我有一个方法,它接受其中两个参数,我必须对它们进行模运算 . 因为它们可能是十进制的,所以我使用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 . 如果您阅读已有的代码,它还可以更轻松地读取代码或查看内容

1 回答

  • 0

    这个方法的问题不是变量的类型,而是每个 Map

    在一个时髦的 Map 中,每个都有两个签名 . 一个接收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}"
    }
    

    第二个结果与第一个结果相同 .

    如果你想传递给myMethod的两个特定参数,那么将它们传递到每个参数之外:

    def callerMethod(Map map) {
        calledMethod(map.val1, map.val2)
    }
    

    我不完全理解你想要的东西..我希望你帮助你做代码 .

相关问题