В другом вопросе, я увидел следующий синтаксис:Что это за синтаксис # [] в REBOL?
#[unset!]
Что это? Если я скажу type? #[unset!]
в R3, он сообщает мне unset!
, но это не решит тайну того, что такое #[]
.
Так любопытно.
В другом вопросе, я увидел следующий синтаксис:Что это за синтаксис # [] в REBOL?
#[unset!]
Что это? Если я скажу type? #[unset!]
в R3, он сообщает мне unset!
, но это не решит тайну того, что такое #[]
.
Так любопытно.
Похоже, это синтаксис стоимости строительства для отключенном, например, в отличие от слова 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!
Похоже, они зарезервировали синтаксис # [...] для более из этих видов конструкторов.
#[]
- это сериализованная форма для значений. Играйте с MOLD по сравнению с MOLD/ALL на консоли, чтобы почувствовать это.
#[]
«синтаксис» на самом деле не синтаксис как таковой (не юридический синтаксис, если вы попробуете его), только частные случаи таких конструкций являются «законными», как #[unset!]
синтаксиса, #[true]
синтаксиса, #[false]
синтаксиса, #[none!]
синтаксис или синтаксис #[datatype! unset!]
.
Что еще интереснее, это то, что на самом деле значение #[unset!]
. Это случается, значение каждого «неинициализированным» переменная в REBOL имеет (не в функции, хотя функция локальные переменные инициализируются #[none!]
), а также результат таких выражений, как print 1
, do []
, ()
и т.д.
Что касается «локальных переменных функций», инициализированных до #[none!]
«Я должен добавить, что только переменные, следующие за« неиспользуемой доработкой »(то есть, которые не используются в фактическом вызове), инициализируются до #[none!]
вместе с переменной уточнения.
Для дальнейшего объяснения проблемы, синтаксический (обмен говор данных) разница между true
и #[true]
в том, что первое является слово, в то время как последнее значение логики! тип. С точки зрения семантической (Do dialect) разность меньше, поскольку (глобальное) слово интерпретируется как переменная, которая, как считается, относится к значению #[true]
.
Посмотрите на примере ниже:
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!]
является особенным, так как каждая неопределенная переменная действительно имеет это значение.
BTW, проверьте некоторые из моих орехов Rebol-vs-Perl Competition в Code Golf. :) http: // stackoverflow.com/вопросы/2527477/code-golf-connect-the-dots/3066878 # 3066878 – HostileFork
Rebmu выглядит довольно круто! Какая польза от REBOL! –
Это становится легче, но вот тот, который я сделал прошлой ночью перед тем точечным соединением, которое я сжег, и не хотел продвигаться к точке «победы» ... уверен, что они могут быть улучшены, если вы хотите играть :) http://stackoverflow.com/questions/3034331/code-golf-rotating-maze/3060396#3060396 – HostileFork