【问题标题】:`self` can not use as arguments of a hy macro`self` 不能用作 hy 宏的参数
【发布时间】:2020-05-23 04:40:31
【问题描述】:

以下宏尝试从 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

【问题讨论】:

    标签: hy


    【解决方案1】:

    默认参数的计算方式与普通表达式一样,因此您需要[base 'self],而不是[base self]

    此外,您在正文中首次提及 x 时缺少 ~

    【讨论】:

      猜你喜欢
      • 2022-08-20
      • 1970-01-01
      • 2017-11-04
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      相关资源
      最近更新 更多