Как привязать к контексту foreach? - PullRequest
0 голосов
/ 05 мая 2010

В настоящее время у меня есть этот фрагмент кода:

    Blocks: ["F4369RO771" "282273" "5" "146" "126" "6-Nov-2009" "8-Jan-2010" "7-Jun-2010" "8"
"M9881KI923" "399727" "2" "359" "443" "5-Aug-2010" "23-Feb-2010" "6-Nov-2009" "4"
]

save-blocks: func[file /local f out][
    foreach [field1 field2 field3 field4 field5 field6 field7 field8 field9] blocks [

out: copy ""
repeat n 9 [
  part: get bind to-word rejoin ["field" n] 'field1 
  out: rejoin [out part ";"]
]
        remove back tail out
        write/lines/append f out


]

Это не достаточно универсально, я хотел бы передать это вместо

block: [field1 field2 field3 field4 field5 field6 field7 field8 field9]

в качестве параметра и напишите что-то вроде этого:

save-blocks: func[block file /local f out][
    foreach block blocks [

out: copy ""
repeat n length? block [
  part: get bind to-word rejoin ["field" n] 'field1 
  out: rejoin [out part ";"]
]
        remove back tail out
        write/lines/append f out


]

Но я не знаю, как связать в этом случае слишком сложно для меня: (

1 Ответ

1 голос
/ 05 мая 2010

(На данный момент, игнорируя вопрос о том, что вы делаете здесь, это хорошая идея.: P)

Помните, что когда вы передаете block! в foreach, он будет связывать слова внутри этого блока во время цикла:

>> foreach [foo bar] ["a" "b"] [print foo print bar]
a
b

Когда вы передаете word! любого типа, он будет полностью перезаписан и никакие переменные не будут назначены (независимо от того, было ли это слово ранее связано с блоком!):

>> foobarblock: [foo bar]

>> foreach foobarblock ["a" "b"] [print foo print bar]
** Script error: foo has no value
** Where: foreach
** Near: foreach foobarblock ["a" "b"] [print foo print bar]

>> foreach foobarblock ["a" "b"] [print foobarblock]
a
b

Чтобы получить эффект, который вы, похоже, здесь желаете, вам нужно что-то вроде:

>> foreach :foobarblock ["a" "b"] [print foo print bar]
a
b

Тогда поведение будет таким, как вы ожидаете, со словами, связанными в локальном контексте.

...