0

目前我有这段代码:

    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


]

但我不知道在这种情况下如何绑定对我来说太难了:(

4

1 回答 1

1

(目前,不管你在这里做什么是否是个好主意的问题。:P)

请记住,当您传递 a block!to时foreach,它将在循环期间绑定该块内的单词:

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

当您传递word!任何类型的 a 时,它将被完全覆盖,并且不会分配任何变量(无论该单词之前是否绑定到块!):

>> 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

然后,行为将是您所期望的,单词绑定在本地上下文中。

于 2010-05-05T19:40:45.240 回答