代码之家  ›  专栏  ›  技术社区  ›  Gregory Higley

rebol中的这个语法是什么?

  •  2
  • Gregory Higley  · 技术社区  · 14 年前

    在另一个问题中,我看到了以下语法:

    #[unset!]

    那是什么?如果我说 type? #[unset!] 在r3中,它告诉我 unset! 但这并不能解决 #[] 是。

    太好奇了。

    4 回复  |  直到 11 年前
        1
  •  2
  •   HostileFork says dont trust SE    14 年前

    看起来它是未设置实例的值构造语法,而不是单词 unset! :

    >> comparison: [unset! #[unset!]]
    == [unset! unset!]
    
    >> type? first comparison
    == word!
    
    >> type? second comparison
    == unset!
    
    >> second comparison
    >> first comparison
    == unset!
    

    如果你在一个程序环境中,你可以用 to-unset 但是有一个文字符号可以让你避开 reduce :

    >> comparison: reduce ['unset! to-unset none]
    == [unset! unset!]
    
    >> second comparison
    >> first comparison
    == unset!
    

    看起来他们已经为更多此类构造函数保留了[…]语法。

        2
  •  6
  •   Joe    14 年前

    #[] 是值的序列化形式。在控制台中播放“模具”与“模具/全部”以获得感觉。

        3
  •  4
  •   Ladislav    14 年前

    这个 #[] “syntax”实际上不是这样的语法(如果尝试,则不是合法语法),只有这种构造的特殊情况才是“legal”,如 #[unset!] 语法, #[true] 语法, #[false] 语法, #[none!] 语法,或 #[datatype! unset!] 语法。

    更有趣的是, [不然的话!] 实际值是。它恰好是rebol中每个“未初始化”变量的值(但在函数中不是,函数局部变量初始化为 [没有]!] )以及类似表达式的结果 print 1 , do [] , () 等。

    关于“函数局部变量…初始化为 [没有]!] “我应该补充一点,只有“未使用的优化”后面的变量(即实际调用中未使用的变量)被初始化为 [没有]!] 以及优化变量。

    为了进一步解释这个问题,句法(数据交换方言)与 true [真] 就是说,前者是一个词,而后者是一种价值逻辑!类型。从语义(do dialect)的角度来看,差异较小,因为(global)单词被解释为一个变量,它恰好指 [真] 价值。

        4
  •  1
  •   Ladislav    11 年前

    请看下面的示例:

    trace on
    >> e: none
    Trace:  e: (set-word)
    Trace:  none (word) ;<<<<<
    
    >> e: #[none]
    Trace:  e: (set-word)
    Trace:  none (none) ;<<<<<
    

    none 是第一个词,但第二个词, #[none] 不是字,它是数据类型的rebol值 none! . 类似于其他值,如 true , false . 这个 #[unset!] case是特殊的,因为每个未定义的变量实际上都有这个值。