Github user jorgebay commented on the issue:

    https://github.com/apache/tinkerpop/pull/792
  
    The implementation looks great and the final `GraphTraversal` and 
`GraphTraversalSource` APIs make a lot of sense, like:
    
    ```csharp
    public GraphTraversal<S, E2> Branch<E2> (IFunction function) {}
    ```
    
    This enables us that if we wanted to in the future, we could implement a 
lambda in C# that takes a `Func<T, TResult>`, like:
    
    ```csharp
    IFunction fn = Lambda.GetFunction<string, int>(text => text.length)
    int traversal.Branch(fn).Next();
    ```
    
    Just 1 suggestion:
    Can we make `Lambda` class `static` and make the `Lambda.Groovy()` and 
`Lambda.Python()` return an `ILambda` interface?
    
    ```csharp
    public interface ILambda : IFunction, IBiFunction, IPredicate,
                               IUnaryOperator, IBinaryOperator, IComparator, 
IConsumer, ISupplier
    ```
    
    ```csharp
    // Make the implementation internal
    internal class StringBasedLambda: ILambda
    {
      public string LambdaExpression { get; }
      public string Language { get; }
      public object Arguments { get; }
      public Lambda(string expression, string language)
      {
        // ...
      }
    }
    ```
    
    Then, the serializers could take an `ILambda`: `{typeof(ILambda), new 
LambdaSerializer()}`


---

Reply via email to