Как мне обратиться к переменной в аргументе func, когда она используется в foreach - PullRequest
1 голос
/ 07 сентября 2010

Как я могу ссылаться на дату в качестве аргумента в f внутри цикла foreach, если дата также используется в качестве элемента блока var?Обязан ли я переименовать мою дату в вар?

f: func[data [block!] date [date!]][
    foreach [date o h l c v] data [

    ]
]

Ответы [ 3 ]

4 голосов
/ 08 сентября 2010

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
2 голосов
/ 08 сентября 2010

Вы можете получить доступ к аргументу даты внутри цикла foreach, связав слово 'date из спецификации функции с аргументом данных:

>> 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
2 голосов
/ 08 сентября 2010

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

...