在 Swift REPL 中抑制值转储

Suppress value-dump in Swift REPL

使用 Swift REPL 时,每次我为变量赋值时,它都会显示该值的整个转储。我想压制这个,因为当它是一个大结构的实例时,它完全吹掉了前面的行。

  1 > let a = SomethingComplex()

a: SomethingComplex = {
  list = 3 values {
    [0] = {
      edges = 4 values {
        [0] = {
          id = 1
          from = 0x0000000100506110 {
            edges = 4 values {
              [0] = {
                id = 3
                from = 0x0000000100506a50 {
                  edges = 4 values {
                    [0] = {
                      id = 5
                      from = 0x0000000100506820 {...}
                      to = 0x0000000100506a50 {...}
                    }
  .
  .
  .

有没有办法抑制这个?

Swift REPL 在 lldb 调试器的上下文中运行,默认情况下, 打印表达式中声明的变量的值。 这是由 lldb 变量控制的

  print-decls                  -- If true, LLDB will print the values of
                                  variables declared in an expression.
                                  Currently only supported in the REPL
                                  (default: true).

(在 Swift REPL 中使用 :set list 获取所有 lldb 变量的列表。)

所以你可以抑制变量声明的输出 通过将该变量设置为 false。示例(请注意,前导 冒号用于发出 lldb 命令):

$ swift
Welcome to Apple Swift version 4.1 (swiftlang-902.0.48 clang-902.0.39.1). Type :help for assistance.

  1> struct SomethingComplex { let x = 1; let y = 2 }
  2> let a = SomethingComplex()
a: SomethingComplex = {
  x = 1
  y = 2
}
  3> :set set print-decls false
  3> let b = SomethingComplex()
  4>