ما الذي يسبب خطأ "كلمة غير مرتبطة بالسياق" في هذا البرنامج النصي؟

StackOverflow https://stackoverflow.com//questions/23039878

  •  21-12-2019
  •  | 
  •  

سؤال

لدي البرنامج النصي 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
   ]
]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top