【问题标题】:declearing a variable in dart and changing its value在 dart 中声明一个变量并改变它的值
【发布时间】:2020-09-20 15:18:38
【问题描述】:

为什么我在这种情况下会出错:

class Person {
  Person({name,age});
  var name,age = 5;
  name = "wael";
  void Xprint()=>print('$name is $age years old');
}

main () {
  var x = Person();
  x.Xprint();
}

错误

1.dart:6:3: 错误:必须使用关键字“const”、“final”、“var”或类型名称来声明变量。 尝试添加变量类型的名称或关键字“var”。 名称=“韦尔”; ^^^^ 1.dart:6:3:错误:“名称”已在此范围内声明。 名称=“韦尔”; ^^^^ 1.dart:5:7: 上下文:'name' 的先前声明。 变量名称,年龄 = 5; ^^^^ 1.dart:7:26: 错误:不能使用'name',因为它被多次声明。 void Xprint()=>print('$name 是 $age 岁'); ^

【问题讨论】:

    标签: variables dart


    【解决方案1】:

    我不确定你在这里想要达到什么目的,但让我试着解释一下发生了什么。

    如果您要声明 local 变量(在函数内部),那么您的方法将是合理的:

    void someFunction() {
      var name, age = 5; // Declaration of two local variables, initialize one of them.
      name = "wael"; // Statement assigning a value to `name`.
      void xprint() => print('$name is $age years old');  // Function declaration
      xprint(); // Statement performing a function call.
    }
    

    然而,你声明了一个

    class Person {
      var name, age = 5; // Declaration of two instance variables.
      Person({name, age});  // constructor (needs more work);
      name = "wael"; // .... this is invalid. Statements are not allowed here.
      void Xprint()=>print('$name is $age years old');  // Instance method declaration.
    }
    

    所以问题是name = "wael"; 不允许出现在它出现的地方。语句只能在函数内部使用,不能作为类声明的一部分。

    不清楚你想要做什么。所以,让我们以我通常这样做的方式声明Person 类:

    class Person {
      String name;
      int age;
      Person({this.name = "wael", this.age = 5}); // Parameters initialize variables directly.
      void xprint() {
        print("$name is $age years old");
      }
    }
    

    此类将“wael”作为名称的默认值,将“5”作为年龄的默认值,但如果提供了参数,则使用该参数。

    (我可能没有nameage 的默认值,但我们假设它在这种情况下有意义)。

    【讨论】:

      【解决方案2】:

      您不能在class 的开放位置有任何指令。任何指令都必须在方法内。你可以这样做:

      class Person {
        Person({name,age});
        var name= "wael",age = 5; // assign default value while declartion
        void Xprint()=>print('$name is $age years old');
      }
      
      main () {
        var x = Person();
        x.Xprint();
      }
      

      或者在constructor上设置默认值

      class Person {
        Person({this.name= "wael",age});
        var name,age = 5;
        void Xprint()=>print('$name is $age years old');
      }
      
      main () {
        var x = Person();
        x.Xprint();
      }
      

      【讨论】:

        猜你喜欢
        • 2019-03-08
        • 1970-01-01
        • 2021-03-09
        • 1970-01-01
        • 2019-08-03
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 2020-01-24
        相关资源
        最近更新 更多