2015-01-16 113 views
4

我一遍又一遍使用相同的函数连续,有没有办法只有像是否有类似于“with”的功能?

而不是
with basicmove() 
{(r),(u, 20),(r) 
end with 

basicmove(r) 
    basicmove(u, 20) 
    basicmove(r) 

编辑:或者

 basicmove(l, 5) 
    basicmove(d, 3) 
    basicmove(l, 21) 
    basicmove(u, 5) 
+0

你可以写一个过载。 '用'表示对象 – Plutonix

+1

作为选项,您可以将参数放入数组,然后在将循环数组元素添加到函数的循环中调用basicmove()。 –

回答

1

我不完全确定这是针对你所要求的一切,但也许它会给你一个想法。

编辑:根据更新的问题,我有另一种解决方案。这需要了解编程中的two-dimensional arrays。您只需将所有“坐标”加载到数组中,然后迭代它们并按照它们输入数组的顺序执行操作。

Sub Main() 
    ' multi-dimensional array of moves (there are plenty of way to create this object if this is confusing) 
    Dim myList(,) As Object = New Object(,) { _ 
           {"l", 5}, _ 
           {"d", 3}, _ 
           {"l", 21}, _ 
           {"u", 5} _ 
          } 

    ' iterate the array and perform the moves. 
    For x As Integer = 0 To myList.GetUpperBound(0) 
     ' getting coordinates from the first & second dimension 
     basicmove(myList(x, 0), myList(x, 1)) 
    Next 

    Console.ReadLine() 
End Sub 

Private Sub basicmove(ByVal a As String, ByVal b As Integer) 
    Console.WriteLine("param1:" & a & ",param2:" & b) 
End Sub 
2

没有,这是不可能的。但是,如果该参数是同一类型的,你可以使用基本类型和List.ForEach或纯For Each循环列表:

moves.ForEach(Function(r) basicmove(r)) 

你可以创建具有适当属性和List(Of Move)一个新的类。

0

原谅c#语法。这是未经测试的,所以可能有错误。

public class myWith{ 
public List<Object> params{get;set;} 
    public with(Action<Object> function){ 
     params.ForEach(p=>function(p)); 
    }  
} 

为使用这个想法是:

new myWith(x=>doStuff(x)){ 
    params = new List<Object>{r, {u,20}, r} 
} 

希望这得到跨越

0

的想法这是不是最漂亮的,但它的工作原理,使用隐式数组:

Private Sub MakeCalls() 
    Dim r As Integer = 1 : Dim u As Integer = 2 
    For Each o In {({r}), ({u, 20}), ({r})} 
     basicmove(o) 
    Next 
End Sub  
Private Sub basicmove(params() As Integer) 
    For Each i As Integer In params 
     Debug.Print(i.ToString) 
    Next 
End Sub 
相关问题