Как мне ссылаться на переменную в аргументе func, когда она используется в foreach?
Как я могу ссылаться на дату как аргумент в f в цикле foreach, если дата также используется в качестве элемента блока var? Обязан ли я переименовать мою дату в вар?
f: func[data [block!] date [date!]][
foreach [date o h l c v] data [
]
]
3 ответа
Решение
A: просто, сочинять - ваш лучший друг.
f: func[data [block!] date [date!]][
foreach [date str] data compose [
print (date)
print date
]
]
>> f [2010-09-01 "first of sept" 2010-10-01 "first of october"] now
7-Sep-2010/21:19:05-4:00
1-Sep-2010
7-Sep-2010/21:19:05-4:00
1-Oct-2010
Вам нужно либо изменить имя параметра от даты, либо присвоить его локальной переменной.
Вы можете получить доступ к аргументу даты внутри цикла foreach, связав слово 'date из спецификации функции с аргументом data:
>> f: func[data [block!] date [date!]][
[ foreach [date o h l c v] data [
[ print last reduce bind find first :f 'date 'data
[ print date
[ ]
[ ]
>> f [1-1-10 1 2 3 4 5 2-1-10 1 2 3 4 5] 8-9-10
8-Sep-2010
1-Jan-2010
8-Sep-2010
2-Jan-2010
Это делает код очень трудным для чтения, хотя. Я думаю, что было бы лучше назначить аргумент даты локальной переменной внутри функции, как предложил Грэм.
>> f: func [data [block!] date [date!] /local the-date ][
[ the-date: :date
[ foreach [date o h l c v] data [
[ print the-date
[ print date
[ ]
[ ]
>> f [1-1-10 1 2 3 4 5 2-1-10 1 2 3 4 5] 8-9-10
8-Sep-2010
1-Jan-2010
8-Sep-2010
2-Jan-2010