this post was submitted on 21 Aug 2024
3 points (100.0% liked)

Perchance - Create a Random Text Generator

448 readers
13 users here now

⚄︎ 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.

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 and ai-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.

founded 1 year ago
MODERATORS
 

I explored this here: https://perchance.org/481tgbwo1k#edit

I can't even guess as to what's happening with some of this. Most bizarre...

you are viewing a single comment's thread
view the rest of the comments
[–] perchance 2 points 2 months ago* (last edited 2 months ago) (2 children)

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:

{
  let a = 10;
  x:2
}

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:

if(true) {
  let a = 10;
  x:2
}

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:

b = [ {} ] // a block with nothing in it
d = [ { x:1 } ] // a block with a labelled statement, x:1
e = [ x = {} ] // assignment, and so right hand side is constrained to be an expression - i.e. cannot be a block
f = [ { toString: function f() { return "hey"; } } ] // same as d
g = [ x2 = { toString: function f() { return "hey"; } } ] // same as e

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 of eval 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.

[–] wthit56 2 points 2 months ago

Oooooh, that was why it was complaining about a "function definition" needing a name, even though it's an assigned value. Huh!

[–] wthit56 1 points 2 months ago

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 the return 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?