You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I had trouble with the step definition from friendsuggest.groovy introduced on page 236 of version P1.0 of the PDF. I, like another reader on the forum, get the following error:
gremlin> g.V.filter{it.name=='Patty'}.friendsuggest.name
==> No such property: start for class: groovysh_evaluate
I think it's related to variable scoping in the Groovy Shell, and the attached commit fixes it for me.
Here's my working:
gremlin> start
==> No such property: start for class: groovysh_evaluate
gremlin> Gremlin.defineStep( 'friendsuggest',
gremlin> [Vertex, Pipe],
gremlin> {
gremlin> _().sideEffect{start = it}.both('friends').except(
gremlin> [start]).out('likes').dedup
gremlin> }
gremlin> )
==>
gremlin> g.V.filter{it.name=='Patty'}.friendsuggest.name
==> No such property: start for class: groovysh_evaluate
gremlin> start = 1
==> 1
gremlin> g.V.filter{it.name=='Patty'}.friendsuggest.name
==> Prancing Wolf Ice Wine 2007
==> Prancing Wolf Kabinett 2002
gremlin> start
==> v[8]
gremlin> start.name
==> Patty
This shows that we start with no shell variable name start, then define the friendsuggest step as in the book, and then see the error I report above. Then I define a shell variable named start and now the query works as expected. Notice that my shell variable has been overwritten by the execution of friendsuggest.
Here's the better result from using a step defined identically except with a local variable definition for the internal variable:
gremlin> Gremlin.defineStep( 'fwendsuggest',
gremlin> [Vertex, Pipe],
gremlin> {
gremlin> def fwendstart
gremlin> _().sideEffect{fwendstart = it}.both('friends').except(
gremlin> [fwendstart]).out('likes').dedup
gremlin> }
gremlin> )
==>
gremlin> fwendstart
==> No such property: fwendstart for class: groovysh_evaluate
gremlin> g.V.filter{it.name=='Patty'}.fwendsuggest.name
==> Prancing Wolf Ice Wine 2007
==> Prancing Wolf Kabinett 2002
gremlin> fwendstart
==> No such property: fwendstart for class: groovysh_evaluate
If you're going to define fwendstart in the closure, then you don't need the sideEffect method:
gremlin> Gremlin.defineStep( 'fwendsuggest',
gremlin> [Vertex, Pipe],
gremlin> {
gremlin> fwendstart=_()
gremlin> fwendstart.both('friends').except([fwendstart]).out('likes').dedup
gremlin> }
gremlin> )
But in actuality, the variable is superfluous. The following works just as well:
gremlin> Gremlin.defineStep( 'fwendsuggest',
gremlin> [Vertex, Pipe],
gremlin> {
gremlin> ().both('friends').except([()]).out('likes').dedup
gremlin> }
gremlin> )
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I had trouble with the step definition from friendsuggest.groovy introduced on page 236 of version P1.0 of the PDF. I, like another reader on the forum, get the following error:
I think it's related to variable scoping in the Groovy Shell, and the attached commit fixes it for me.
Here's my working:
This shows that we start with no shell variable name start, then define the
friendsuggeststep as in the book, and then see the error I report above. Then I define a shell variable namedstartand now the query works as expected. Notice that my shell variable has been overwritten by the execution offriendsuggest.Here's the better result from using a step defined identically except with a local variable definition for the internal variable: