Используя прямые значения в Rebol? - PullRequest
1 голос
/ 09 марта 2011

Я новичок Ребола.Я часто нахожу ситуации, когда по какой-то причине выражение должно иметь значение в качестве переменной, а не «прямое использование».Я подозреваю, что я просто неправильно использую оператор переключения или разыменования?

Пример:

>> "hi"/1 ; doesn't work
== /1

>> x: "hi"
== "hi"
>> x/1 ; works
== #"h"

В любом случае я могу заставить этот и другие примеры работать с "прямым использованием?"

Спасибо.

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

Попробуйте:

>> first "hi"    ;; also SECOND, THIRD, .... , NINTH
== #"h"

>> pick "hi" 1   ;; PICK var INDEX-VALUE 
== #"h"

>> x: "hi"       ;; like FIRST
>> last x
== #"i"

>> y: 2          ;; use Y as an index
>> pick x y      ;; same as pick x 2
== #"i"

>> x/:y          ;; the Yth char in X
== #"i"
1 голос
/ 15 апреля 2011

Каждый тип данных имеет свое собственное лексическое представление, которое позволяет вам взаимодействовать с его внутренними данными (или нет).

Нет фактического пути синтаксиса или оператора в REBOL. В основном это связано с тем, что Rebol не является языком ООП, даже если у него есть объект! Тип данных.

Возможно, вы не заметили, что код FOO/BAR вовсе не является выражением, а представляет собой один элемент данных, который на самом деле имеет path! *datatype*

>> FOO: context [BAR: "WTF!"]
>> type? first [ FOO/BAR ]
== path!

Только пути позволяют перемещаться по данным Rebol «буквально». Это происходит только тогда, когда пути _ оцениваются _. В этом случае вы получите значение, полученное путем навигации по этому пути.

>> type? do [ FOO/BAR ]
== string!

В Rebol универсальный тип доступа «accessors» не лексический, а программный по своей природе. Как показала Sunanda, вы используете различные серии функций для непосредственного управления литеральными данными.

это очень мощно, так как они могут быть "прикованы", например:

>> x: head remove back back back tail "-|_|-"
== "-||-"

В заключение я дам вам тизер более сложного использования пути ... выражения пути!

>> blk: ["12" "34" "56" "78" "90" "ab" "cd" "ef"]
>> skip-size: 2
>> item: 3
>> blk/(skip-size * item - 1)/2
== #"0"

Обратите внимание, что вы действительно можете поместить любой код в парен! если это следует за данными, по которым можно перемещаться.

1 голос
/ 30 марта 2011

Я не эксперт, но я понимаю, что выражения с / метками в них называются путями, и должен начинаться с word!, а не с литерала - то, что вы называете «прямое значение» - любого рода.

Вы можете думать о / как о синтаксическом сахаре для pick и select, когда у вас есть word!, который служит переменной. Вы не можете сказать "foo"/bar, потому что "foo" это string!, а не word!, но вы можете сказать foo/bar, потому что foo это word!.

...