groovy类方法未返回预期结果

groovy类方法未返回预期结果,groovy,Groovy,我希望结果返回“这些是我的项目:*foo*bar”,但它返回“这些是我的项目:”。等价的语法在JS中工作 这似乎是一个异步问题,但我不确定如何修复。我做了一些搜索并找到了ExecutorService API,但不确定如何合并 问题 有没有人可以编辑这个groovy剪报,这样返回的内容就会产生“这些是我的物品:*foo*bar”?如果可能的话,我想维护多类JS react-like结构。包括这一点,使其更像Groovy class Items{ List list It

我希望结果返回
“这些是我的项目:*foo*bar”
,但它返回
“这些是我的项目:”
。等价的语法在JS中工作

这似乎是一个异步问题,但我不确定如何修复。我做了一些搜索并找到了ExecutorService API,但不确定如何合并

问题


有没有人可以编辑这个groovy剪报,这样返回的内容就会产生
“这些是我的物品:*foo*bar”
?如果可能的话,我想维护多类JS react-like结构。

包括这一点,使其更像Groovy

class Items{
    List list
    
    Items(List list){
        list = list
    }
    
    def render(){
        return ("these are my items: ${list.collect{new Item(it).render()}.join(' ')}")
    }
}

class Item{
    List item
    
    Item(String item){
        item = item
    }
    
    def render(){
        return ("* ${item}")
    }
}

new Items(['foo', 'bar']).render()
Groovy具有隐式返回,不需要额外的父级

就我个人而言,我也不喜欢这样的大字符串插值;我会把它拉到一个中间变量中

class Items{
    List list
    
    Items(List list){
        this.list = list
    }
    
    def render(){
        return ("these are my items: ${list.collect{new Item(it).render()}.join(' ')}")
    }
}

class Item{
    String item
    
    Item(String item){
        this.item = item
    }
    
    def render(){
        return ("* ${item}")
    }
}

new Items(['foo', 'bar']).render()

您的
项目。项目
是一个
列表
,而不是
字符串
。您的构造函数必须是
this.x=x
。异步问题?我不明白你说的是什么意思。您的构造函数缺少此.xxx(两个);您正在将参数分配给自身
Item
的Item应该是一个字符串,与代码的其余部分一致。虽然我也有一个输入错误,但使用“this”可以做到这一点。@BGS如果您的参数与实例变量的名称相同,它怎么知道您指的是什么?很抱歉清楚的事情我还是不知道哈。。我觉得我以前没有在groovy中对实例化类使用“this”就侥幸逃脱了。所以你总是必须用实例化类来“this”来引用类字段?如果你想去掉c'tor,你可以在两个类上使用
groovy.transform.TupleConstructor
注释。我喜欢它。谢谢你的帮助。
class Items {
  List list
    
  def render() {
    "these are my items: ${list.collect { new Item(item: it).render() }.join(' ')}"
  }
}

class Item {
  String item
    
  def render() {
    "* ${item}"
  }
}

println(new Items(list: ['foo', 'bar']).render())