print 是语言的重要功能。

我从青年时代就学过 Python, JavaScript, C, C++, Rust

我可是身经百战见得多了,主流的哪个语言我没见过。

Python

魔法方法实现复用组件。

class Foo:
    def __str__(self):
        ...
print(Foo())

或者

@dataclass
class Foo:
    ...
print(Foo())

JavaScript/TS

对象 prototype 的 toString 方法

Foo.prototype.toString = () => "xxx"
console.log(Foo());

或者 ES6 引入的 class 语法糖

class Foo{
    toString(){
        ...
    }
}

C

  1. 直接打印 field.

    struct Foo{
    
    }
    const char * print_foo(Foo const* foo){
        printf("%......", foo->fields, ....);
    }
    Foo foo = Foo{.fileds=xxx, ...}
    print_foo(&foo);
    
  2. 用 sprintf 序列化。但是由于需要 malloc, 还需要返回长度,此处略。

由于 C 采用 %x 格式化,无法自定义格式化。

C++

重载 <<

class Foo{
    public:
        ...
}

ostream& operator<<(ostream& os, const Foo& foo)
{
    os << foo.x << ...;
    return os;
}