Code Monkey home page Code Monkey logo

Comments (2)

leftbones avatar leftbones commented on May 28, 2024

Right after posting this, I found that I could check with Table["Key"].IsTable and that would return true only if the key exists, which does solve my problem. I am still curious what the use case for TomlLazy is, however.

from tommy.

dezhidki avatar dezhidki commented on May 28, 2024

Hi, thanks for the question! Glad you managed to find the solution to your question.

TomlLazy is mainly an abstraction over an array or a table that can be automatically created on access. The basic use case is to allow composing TOML files implicitly as such:

var toml = new TomlTable();
toml["array"][0] = "val1";  // toml["array"] returns a TomlLazy instance, but index access [0] automatically replaces TomlLazy with TomlArray
toml["array"][1] = "val2"; // toml["array"] now returns a TomlArray

The basic case is not really interesting, but the TomlLazy becomes useful when you use property initializiers, allowing you to construct the entire table in JSON-like syntax:

var toml = new TomlTable
{
  ["owner"] =                // Here TomlLazy is implicitly created 
  {
     ["name"] = "Foo",   // Here, TomlLazy is implicitly replaced with a TomlTable
     ["dob"]  = "bar",
  },
  ["array"] = { [0] = 1, [1] = 2 }  // Same thing, but now TomlArray is created because of index access
};

This pattern was originally taken from SimpleJSON which at some point was a fairly popular JSON parser/writer for Unity games back when C# did not have.

Nowadays, I'd say that this implicit behaviour is somewhat cryptic, and it belongs to a separate library. Alas, I think it's a breaking change to remove it.

PS: TomlNode has a HasKey method to check whether it contains a key of certain name. If I understood your usecase correctly, Table.HasKey("Key") should do the trick.

from tommy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.