Как мне ссылаться на переменную в аргументе 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
Другие вопросы по тегам