Perchance - Create a Random Text Generator
⚄︎ Perchance
This is a Lemmy Community for perchance.org, a platform for sharing and creating random text generators.
Feel free to ask for help, share your generators, and start friendly discussions at your leisure :)
This community is mainly for discussions between those who are building generators. For discussions about using generators, especially the popular AI ones, the community-led Casual Perchance forum is likely a more appropriate venue.
See this post for the Complete Guide to Posting Here on the Community!
Rules
1. Please follow the Lemmy.World instance rules.
- The full rules are posted here: (https://legal.lemmy.world/)
- User Rules: (https://legal.lemmy.world/fair-use/)
2. Be kind and friendly.
- Please be kind to others on this community (and also in general), and remember that for many people Perchance is their first experience with coding. We have members for whom English is not their first language, so please be take that into account too :)
3. Be thankful to those who try to help you.
- If you ask a question and someone has made a effort to help you out, please remember to be thankful! Even if they don't manage to help you solve your problem - remember that they're spending time out of their day to try to help a stranger :)
4. Only post about stuff related to perchance.
- Please only post about perchance related stuff like generators on it, bugs, and the site.
5. Refrain from requesting Prompts for the AI Tools.
- We would like to ask to refrain from posting here needing help specifically with prompting/achieving certain results with the AI plugins (
text-to-image-plugin
andai-text-plugin
) e.g. "What is the good prompt for X?", "How to achieve X with Y generator?" - See Perchance AI FAQ for FAQ about the AI tools.
- You can ask for help with prompting at the 'sister' community Casual Perchance, which is for more casual discussions.
- We will still be helping/answering questions about the plugins as long as it is related to building generators with them.
6. Search through the Community Before Posting.
- Please Search through the Community Posts here (and on Reddit) before posting to see if what you will post has similar post/already been posted.
view the rest of the comments
This is correct/expected behavior, and isn't Perchance-specific, but I'll admit it's confusing. It's basically "JavaScript labelled statements strike again". This is valid JavaScript:
The curly braces define a block, so that the
a
variable is only defined within that block - this is very handy, and I use it quite a lot. It's equivalent to:The
x:2
on the other hand is unusual and wouldn't be written in "normal" code. It's a labelled statement, but it's a useless one, since there's no way to actually "use" it.So TL;DR:
{x:2}
is being treated as a block with a labelled statement rather than a JavaScript object. The workaround is to wrap it in parentheses like[ ({ x:1 }) ]
instead of[ { x:1 } ]
.I've added some comments to your example generator:
You can test all of the above using eval like:
eval("{x:1}")
to see it's not Perchance-specific. To add to the confusion, DevTools does some "magic" on top ofeval
in order to basically prioritize interpretation as an object, I think.I like DevTools' approach better, and have actually considered "fixing" this, since it would be weird to use JS blocks with labelled statements inside square blocks, but it's probably too late due to backwards-compat issues, and would need to wait for V2 of the engine.
Even though it's not technically a bug, I'll link this comment from perchance.org/known-bugs as something to improve on in V2 of the engine.
Oooooh, that was why it was complaining about a "function definition" needing a name, even though it's an assigned value. Huh!
Yeah I thought it might be it getting confused about scopes vs objects again. That's why I tried
x = {}
. Honestly, I would've thought it would know it's not a scope from thereturn
you must be adding to run the code in the first place, know what I mean?Oh maybe you're doing eval too, which doesn't use a return--is that it? I'm still thinking in "compilation" terms, the way I do stuff like this. So the JS just stays untouched and depending on the circumstances I just wrap a
return (...)
around it. But you do a lot of eval stuff, I noticed.It's funny, the way I've used eval in the past, I do the assignment in the eval. Like,
eval("x = 1")
which I guess would encourage it to see things as objects/values instead of scopes/code bodies?