0

下面的宏尝试从 init 参数分配一个成员变量。

name 'self' is not defined

(defmacro optional_assign [x &optional [base self]]
    `(lif ~x (setv (. ~base ~x) ~x) (setv (. ~base ~x ) None) ))

(defclass clsa []
    (defn __init__ [self &optional y]
      (optional_assign y) 
      ))

(setv insa1 (clsa 123))
(print insa1.y) ;;=>123  
(setv insa2 (clsa))
(print insa2.y) ;;=>None
4

1 回答 1

1

默认参数像普通表达式一样被评估,所以你想要[base 'self],而不是[base self]

此外,您在正文中~第一次提到的时候遗漏了一个。x

于 2020-05-23T13:39:56.013 回答