当在foreach中使用相同时,如何在func参数中引用变量

时间:2010-09-07 15:25:25

标签: rebol

如果date也被用作块元素var,如何在foreach循环中将date作为参数引用?我是否有义务重命名我的日期变量?

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

    ]
]

3 个答案:

答案 0 :(得分:4)

答:简单,撰写是你最好的朋友。

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

答案 1 :(得分:2)

您需要从日期更改参数名称或将其指定给本地变量。

答案 2 :(得分:2)

您可以通过将函数规范中的日期字绑定到data参数来访问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

它使代码很难阅读。我认为最好将日期参数分配给函数内部的局部变量,如Graham建议的那样。

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