ما الذي يسبب خطأ "كلمة غير مرتبطة بالسياق" في هذا البرنامج النصي؟
سؤال
لدي البرنامج النصي R3-GUI التالي:
Rebol [
file: %context.reb
]
either exists? %r3-gui.r3 [do %r3-gui.r3][load-gui]
view [
title "First Window"
hgroup [
lab: label "fld 1 "
fld1: field "Field Data 1"
]
button "Display fld 1" on-action [if error? try [probe get-face fld1][alert "Can't read fld1"]]
button "Display fld 2" on-action [if error? try [probe get-face fld2][alert "Can't read fld2"]]
button "Open 2nd Window" on-action [
view [
title "Second Window"
hgroup [
label "fld 2" fld2: field "field 2 data"
]
button "Display fld1" on-action [if error? err: try [probe get-face fld1][probe err alert "Can't read fld1"]]
button "Display fld2" on-action [if error? err: try [probe get-face fld2][probe err alert "Can't read fld2" ]]
]
]
]
عندما أنقر فوق الزر "عرض fld2" في النافذة الثانية للوصول إلى محتويات fld2، أحصل على رسالة ** Script error: fld2 word is not bound to a context
خطأ.ما هو سبب ذلك؟وكيف يمكنني الوصول إلى fld2
كلمة داخل النافذة الثانية؟
المحلول 2
تنشأ المشكلة لأن الوظيفة المجهولة التي يتم إنشاؤها بواسطة parse-layout
يجب أن تكون الوظيفة إغلاقًا، وهي ليست كذلك.انظر الفرق في https://Gist.github.com/earl/a009454787d9fe4cfaca الذي يحل المشكلة.
نصائح أخرى
لأن fld2 محلي لوظيفة مجهولة وغير مرتبط بسياق المستخدم
>> help win-face/facets/tab-face/actors
WIN-FACE/FACETS/TAB-FACE/ACTORS is a block of value: [on-action make function! [[face arg
/local fld2 err
][
view layout [
title "Second Window"
hgroup [
label "fld 2" fld2: field "field 2 data"
]
button "Display fld 1" on-action [if error? try [probe get-face fld1] [alert "Can't read fld1"]]
button "Display fld2" on-action [if error? err: try [probe get-face fld2] [probe err alert "Can't read fld2"]]
]
]]]
>>
إنه يعمل، إذا قمت بذلك بهذه الطريقة
l2: layout [
title "Second Window"
hgroup [
label "fld 2" fld2: field "field 2 data"
]
button "Display fld1" on-action [if error? err: try [probe get-face fld1][probe err alert "Can't read fld1"]]
button "Display fld2" on-action [if error? err: try [probe get-face fld2][probe err alert "Can't read fld2" ]]
]
view l1: layout [
title "First Window"
hgroup [
lab: label "fld 1 "
fld1: field "Field Data 1"
]
button "Display fld 1" on-action [if error? try [probe get-face fld1][alert "Can't read fld1"]]
button "Display fld 2" on-action [if error? try [probe get-face fld2][alert "Can't read fld2"]]
button "Open 2nd Window" on-action [
view l2
]
]
لا تنتمي إلى StackOverflow