如何使用变量作为方法名称

Posted

技术标签:

【中文标题】如何使用变量作为方法名称【英文标题】:How to use a variable for method name 【发布时间】:2021-11-11 18:53:22 【问题描述】:

我想使用一个变量来访问我的 hive 数据库中的某个值: 在下面的代码中,如果我使用 myBox.getAt(i).attributeSelect 我会收到错误,因为未为框定义 attributeSelect。 如果我使用 myBox.getAt(i).test 它可以工作。我怎样才能让颤振认识到 attributeSelect 是一个变量并将值放在那里?我总共有 181 个不同的变量可供用户选择。我真的需要那么多 if 子句吗?变量是布尔值。所以我想检查索引 i 处的文档的该属性是否为真。

错误:NoSuchMethodError:'attributeSelect' 找不到方法 接收方:“HiveDocMod”实例

attributeSelect = 'test'; //value depends on user choice
Future<void> queryHiveDocs() async 
    final myBox = await Hive.openBox('my');
    for (var i = 0; i < myBox.length; i++) 
      if (attributeSelect == 'All Documents') 
        _hiveDocs.add(myBox.getAt(i)); // get all documents
        //print(myBox.getAt(24).vesselId);
       else 
        // Query for attribute
        if (myBox.getAt(i).attributeSelect) 
          _hiveDocs.add(myBox.getAt(i)); // get only docs where the attributeSelect is true
        
      
    
    setState(() 
      _hiveDocs = _hiveDocs;
      _isLoading = false;
    );
  

【问题讨论】:

可能您需要使用 TypeAdapter 设置您的类。 docs.hivedb.dev/#/custom-objects/generate_adapter 你能发布更完整的代码(理想情况下是一个最小的、可重现的例子)吗? attributeSelect 声明在哪里? typeadapter 是为测试等设置的。正如我所说,如果我写 myBox.getAt(i).test,它工作正常,但是用 attributeSelect = test 写 myBox.getAt(i).attributeSelect不起作用,因为它不使用该变量的值。 我知道您现在要做什么:您想使用 String 作为属性名称。如果没有代码生成,这是不可能的。或者,您可以存储 Map&lt;String, bool&gt; 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

我以令人讨厌的方式解决了它:

            if (attributeSelect == 'crsAirCompressor') 
              if (myBox.getAt(i).crsAirCompressor) 
                _hiveDocs.add(myBox.getAt(i));
              
             else if (attributeSelect == 'crsBatteries') 
              if (myBox.getAt(i).crsBatteries) 
                _hiveDocs.add(myBox.getAt(i));
              ...

【讨论】:

即使有 100 个 if 子句,它仍然会在一瞬间运行。以这种方式编程很烦人。希望 isar 很快就能正常工作,我们不需要编写自己的查询。在此之前,这已经足够好了。

以上是关于如何使用变量作为方法名称的主要内容,如果未能解决你的问题,请参考以下文章

如何使用字符串作为整数的名称? C++ [重复]

如何在 AJAX 调用中获取 JavaScript 变量作为 Laravel 路由名称

将方法名称作为字符串给出时,如何调用 Java 方法?

如何使用php将2个变量输入添加到txt文件保存名称

如何通过使用代码更改变量名称来动态使用变量

使用动态变量名称作为函数/方法的参数