【问题标题】:Flutter/Dart - Dynamic value in a variableFlutter/Dart - 变量中的动态值
【发布时间】:2021-02-15 03:03:56
【问题描述】:

我想在其中创建一个具有动态值的变量。像这样的:

String myAlphabet = 'c';
List myList = [
   'a',
   'b',
   getMyAlphabet()
];

String getMyAlphabet(){
   return myAlphabet;
}

当我访问 myList 时,我应该得到 ['a','b','c']。但是在我的程序的某一时刻,myAlpabet 的值更改为“d”。那时,当我访问 myList 时,我应该得到 ['a','b','d'] 但我仍然得到 ['a','b','c']。

如何做到这一点,以便每次访问 myList 时,我都会获得最新的值,而不是第一次初始化时的值?提前谢谢你。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:
    List myList = [
       'a',
       'b',
       getMyAlphabet()
    ];
    

    getMyAlphabet() 将在创建此 List 时进行评估,结果 将存储在 List 中。

    如果您希望 myList 始终返回具有 getMyAlphabet() 最新评估的 List,您可以通过将 myList 设为 getter 函数,每次创建并返回一个新的 List

    List get myList => ['a', 'b', getMyAlphabet()];
    

    请注意,您将无法有效地变异 myList,这可能会让调用者感到惊讶。

    另一种方法是让myList 成为thunks 的列表,以便他们需要额外的评估:

    List<String Function()> myList = [
      () => 'a',
      () => 'b',
      getMyAlphabet,
    ];
    
    var a = myList[0]();
    var lastElement = myList.last();
    var list = [for (var thunk in myList) thunk()];
    

    更进一步,您可以创建自己的 List 类,其 operator[] 实现会自动调用每个 thunk,而不是让调用者这样做。

    【讨论】:

      【解决方案2】:

      嗯...你用制作方法来获取我的列表怎么样?

      
      //
      ​
      //
      
      void main() {
        String myAlphabet = 'c';
        String getMyAlphabet(){
          return myAlphabet;
        }
        
        List<String> getMyList() {
          return [
            'a',
            'b',
            getMyAlphabet()
          ];
        }
        
        List myList = [
          'a',
          'b',
          getMyAlphabet()
        ];
      
      
        print(myList);
        print(getMyList());
        
        myAlphabet = 'd';
        
        print(myList);
        print(getMyList());
        
      
      }
      
      
      

      【讨论】:

        【解决方案3】:

        我相信你必须编辑列表而不是尝试在列表中创建一个“指针”,我认为这在 Dart 中是不可能的。

        List 有一个名为replaceRange (docs) 的方法,您可以使用它来替换列表中某个索引处的值。您可以结合其他方法来做同样的事情。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-24
          • 1970-01-01
          • 2016-04-19
          • 1970-01-01
          • 2019-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多