В приведенной ниже спецификации порта я пытаюсь проанализировать URL-адрес, чтобы определить пользователя, пароль, хост и путь. Значения User/Pass являются необязательными, но я бы хотел установить значения по умолчанию для каждого, если они отсутствуют.Пользователи/Пароли в Rebol 3 Схемы
Однако, если пользователя/прохода нет, user
/pass
исключены из объекта -почему это так?
>> read sch://foo/bar.r
PORT/SPEC is an object of value:
title string! "Wee Scheme"
scheme word! sch
ref url! sch://foo/bar.r
path string! "/bar.r"
host string! "foo"
>> read sch://foo:[email protected]/bar.r
PORT/SPEC is an object of value:
title string! "Wee Scheme"
scheme word! sch
ref url! sch://foo:[email protected]/bar.r
path string! "/bar.r"
pass string! "bar"
user string! "foo"
host string! "foo"
Кроме того, при разработке этого вопроса, я сделал ошибку в схеме и связала правило синтаксического анализа к port
, а не port/spec
-Как значения затем установить в port/spec
объекта?
Spec:
sys/make-scheme [
name: 'sch
title: "Wee Scheme"
actor: [
read: func [port][
parse port/spec/ref use [chars][
chars: charset [#"a" - #"z" #"A" - #"Z" #"0" - #"9" "-_!+%.,"]
bind [
"sch://" [
copy user some chars #":"
copy pass some chars #"@"
| (user: 'mince pass: 'tatties)
]
copy host some chars
copy path [some [#"/" any chars]]
end
] port
]
? port/spec
]
]
]
Итак, откуда пользователь/пароль пришел с этого момента в объект port/spec, я их не добавил. И что происходит с «фаршем» и «tatties»? – rgchris
parse-url захватывает пользователя и пароль с URL-адреса, предоставленного для открытия. –
См. Make-port, который вызывает parse-url на URL-адресе! https://github.com/rebol/r3/blob/master/src/mezz/sys-ports.r#L32 –