You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Mojo中打印含Bool类型的List?为何无法直接打印?

为什么Mojo无法直接打印List[Bool]?

核心原因

报错的本质是List[Bool]类型没有实现Mojo标准库中的Writable trait,而print函数要求传入的参数必须符合该trait才能被输出。

细节说明

  1. print函数的依赖
    Mojo的print函数底层依赖Writable trait完成对象的序列化输出——该trait定义了对象如何被转换为可写入输出流的格式。任何要被print直接处理的类型,都必须实现这个trait。

  2. List[Bool]的默认支持缺失
    标准库中仅为部分List的特化类型(比如List[Int]、List[String])默认实现了Writable,但List[Bool]并没有被包含在内,因此直接传入print会触发类型不匹配的错误。

解决方法

方法1:遍历逐个打印元素

这是最简单的方式,直接遍历List并打印每个Bool元素:

def main():
    m = List[Bool](True, False, True)
    for item in m:
        print(item)

方法2:手动构建字符串后打印

如果需要输出类似列表的格式,可以手动拼接字符串再打印:

def main():
    m = List[Bool](True, False, True)
    var repr = "["
    for idx, val in enumerate(m):
        if idx > 0:
            repr += ", "
        repr += str(val)
    repr += "]"
    print(repr)

方法3:为List[Bool]实现Writable trait(进阶)

如果需要频繁打印List[Bool],可以通过扩展为其实现Writable trait,之后就能直接用print输出:

from io import Writable, OutputStream

extension List[Bool]:
    fn write(self, stream: &mut OutputStream):
        stream.write_all("[".utf8_bytes())
        for idx, val in enumerate(self):
            if idx > 0:
                stream.write_all(", ".utf8_bytes())
            stream.write_all(str(val).utf8_bytes())
        stream.write_all("]".utf8_bytes())

def main():
    m = List[Bool](True, False, True)
    print(m)

内容的提问来源于stack exchange,提问作者user32123338

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 19:12:06