1
개체의 속성을 확인하기 위해 개체를 검사하려고합니다. stdout에 객체를 출력하는 방법이 있습니까?Vala : 개체를 표준 출력으로 인쇄하는 방법
개체의 속성을 확인하기 위해 개체를 검사하려고합니다. stdout에 객체를 출력하는 방법이 있습니까?Vala : 개체를 표준 출력으로 인쇄하는 방법
개체를 문자열로 변환 할 방법이 없습니다. ((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");
}
}