Step - by

by() modulates the step right before it: what to read from each traverser, or how to sort or group it. The arguments and the steps that take by() are described in The by() Modulator.

by() without an argument

A bare by() is the identity: TinkerPop's by() is by(__.identity()), and Graphersal lowers it to exactly that child traversal.

g.V("1").as("a").values("name").as("b").select("a", "b").by(T.label).by().next()
// {"a": "person", "b": "marko"}
g.V().values("name").fold().order(Scope.local).by()          // the same as order(Scope.local)
g.V().repeat(__.out()).times(2).path().by().by("name").by("lang")

In group() a bare value by() collects the members of each key as a list, as TinkerPop's GroupStep does for an identity value traversal (map(identity).fold()), instead of keeping one member: g.V().group().by(T.label).by() maps person to its four vertices.

Rust: by(__::identity()).