【问题标题】:Accessing static class variable in foreach context in vala在vala的foreach上下文中访问静态类变量
【发布时间】:2015-11-13 13:54:53
【问题描述】:

我原本想在方法中使用静态,但由于 vala 中不存在它,所以我尝试使用静态对象。

唯一的问题是我得到了这个错误

utils.vala:112.11-112.57: error: invocation not supported in this context
      Synapse.Utils.spec_char_map (_chrs[0], _chrs[1]);
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

以上代码

    namespace Synapse
    {
      namespace Utils
      {
        static Gee.HashMap spec_char_map;

        public static void map_special_chars (ref string query) {
          if (null == spec_char_map)
          {
            message("INIIIIT");
            spec_char_map = new Gee.HashMap<char, char> ();
            var spec_char_table = "ъ=-,Ь=-,Ъ=-,ь=-";

            foreach (var spec_char in spec_char_table.split (","))
            {
              var _chrs = spec_char.split ("=");
              spec_char_map (_chrs[0], _chrs[1]);
            }
          }
        }
      }
    }

这个错误是什么原因,为什么我不能在 foreach 上下文中使用我的 Hashtable ?对于我想做的事情,有没有更简单的解决方案?

【问题讨论】:

    标签: vala


    【解决方案1】:

    这不是将某些内容放入哈希图中的正确语法。使用:

    spec_char_map.set (_chrs[0], _chrs[1]);
    

    spec_char_map[_chrs[0]] = _chrs[1];
    

    另外,考虑使用GLib.Once 创建一个线程安全的初始化器。

    【讨论】:

    • 好吧,使用spec_char_map[_chrs[0]] = _chrs[1];error: missing generic type arguments 无论我使用什么方法,我都无法访问foreach 中的对象,因为它会给出错误。我也尝试了spec_char_map.set (_chrs[0], _chrs[1]);,结果相同。
    • 将全局变量更改为static Gee.HashMap&lt;char, char&gt; spec_char_map;(带有类型参数)。
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多