【问题标题】:Vala: How do I print a object to stdoutVala:如何将对象打印到标准输出
【发布时间】:2015-01-14 10:39:43
【问题描述】:

我正在尝试检查一个对象以查看它具有哪些属性。有没有办法将对象打印到标准输出?

【问题讨论】:

    标签: vala


    【解决方案1】:

    没有将对象转换为字符串的方法。你可以用((ObjectClass) obj.get_type().class_ref()).list_properties() 来检查一个类的属性(虽然不是所有的字段,只有属性)。你可能会喜欢这样的东西:

    public void type_info<T>() {
        var type = typeof(T);
        TypeQuery query;
        type.query(out query);
        stdout.printf("%s %c%c%c%C%C%C%C%C%C%C%C size(class = %u instance = %u)\n", type.name(),
            type.is_object() ? 'o' : '-',
            type.is_abstract() ? 'a' : '-',
            type.is_classed() ? 'c' : '-',
            type.is_derivable() ? (type.is_deep_derivable() ? 'D' : 'd') : '-',
            type.is_derived() ? 'v' : '-',
            type.is_fundamental() ? 'F' : '-',
            type.is_instantiatable() ? 'N' : '-',
            type.is_interface() ? 'i' : '-',
            type.is_value_type() ? 's' : '-',
            type.is_enum() ? 'e' : '-',
            type.is_flags() ? 'f' : '-',
            query.class_size,
            query.instance_size);
    
        if (type.is_object()) {
            stdout.printf("class %s", type.name());
            for(var parent = type.parent(); parent != Type.INVALID; parent = parent.parent()) {
                stdout.printf(" : %s", parent.name());
            }
            stdout.printf(" {\n");
            foreach (var property in ((ObjectClass)type.class_ref()).list_properties()) {
                stdout.printf("\t%s :: %s -- %s\n", property.name, property.value_type.name(), property.get_blurb());
            }
            stdout.printf("}\n");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 2018-12-25
      相关资源
      最近更新 更多