23 Dec 15:42
Re: Scala Object Notation ( SCON? )
David Pollak <feeder.of.the.bears <at> gmail.com>
2007-12-23 14:42:24 GMT
2007-12-23 14:42:24 GMT
On Dec 23, 2007 3:44 AM, David Bernard <david.bernard.31 <at> gmail.com> wrote:
Which is what you get with lift components.
But I believe the larger issue is one of mutability and internal type representation.
JavaScript has JSON because it is pretty much built on hash tables and the built in types (numbers, Strings, dates, booleans, arrays and hashs/objects) are so limited in number that it makes sense to have special syntax for each of them.
Scala, too, has some special notation for building object hierarchies: case classes. One can build complex object hierarchies using case classes. In my opinion, they are as easy to read as JSON objects. They are a little more verbose to type, but that's because they're typed (ah hah... a pun.)
One can also do:
Map('foo -> Array(1,2,3), 'bar -> Array("dog", "cat"), 'baz -> Date("12-23-07"))
It's a little more verbose than JSON, but the objects are serializable as JSON (okay, I made up the Date thing, but it's not hard to implement.)
If you want the kind of unstructured hash tables you get with JavaScript, use Maps/Arrays (or Lists). If you want more structured stuff, where are case classes lacking?
Thanks,
David
I thinks that with some change in Property you could support a builder approach that support
val w = new Widget()
.name("MyWidget")
.height(10)
.children(label, panel, button)
Which is what you get with lift components.
But I believe the larger issue is one of mutability and internal type representation.
JavaScript has JSON because it is pretty much built on hash tables and the built in types (numbers, Strings, dates, booleans, arrays and hashs/objects) are so limited in number that it makes sense to have special syntax for each of them.
Scala, too, has some special notation for building object hierarchies: case classes. One can build complex object hierarchies using case classes. In my opinion, they are as easy to read as JSON objects. They are a little more verbose to type, but that's because they're typed (ah hah... a pun.)
One can also do:
Map('foo -> Array(1,2,3), 'bar -> Array("dog", "cat"), 'baz -> Date("12-23-07"))
It's a little more verbose than JSON, but the objects are serializable as JSON (okay, I made up the Date thing, but it's not hard to implement.)
If you want the kind of unstructured hash tables you get with JavaScript, use Maps/Arrays (or Lists). If you want more structured stuff, where are case classes lacking?
Thanks,
David
my 2 cents.
/davidB
Andrés Testi wrote:
> Yes, but I don't like the fact of create a subclass of Person. I just
> want to instantiate a Person. Suppose you have this Widget class:
>
> class Widget{
> val name = new Property("")
> val width = new Property(0)
> val height = new Property(0)
> val children = new Property(Array[Widget]())
> }
>
> To populate the Widget properties without Object notation, you need to
> write the next code
>
> val w = new Widget
> p.name() = "MyWidget"
> p.height() = 10
> p.children() = Array(
> label, panel,button
> )
>
> the previous code is not Property-Editor friendly, because the
> "programmatic" nature. Then, a declarative syntax is the key. But
> creating annonimous class is not declarative but programmatic, because
> I would to assign a property 2 times:
>
> new Widget{
> name="MyWidget"
> name="YourWidget"
> }
>
> In the other hand, I don't like to subclass Widget, because I just
> want to instantiate Widget.
>
> 2007/12/22, martin odersky < martin.odersky <at> epfl.ch>:
>>> Hello:
>>> Is it possible to instantiate scala objects in a declarative way like
>>> JSON. I think this would be a solution:
>>>
>>> val p = new Person{
>>> name = "Peter"
>>> age = 20
>>> friends = Array(
>>> new Person{
>>> name = "Gary"
>>> }
>>> )
>>>
>>> }
>>>
>> Sure. That you wrote is legal Scala, assuming you declared Person like this:
>>
>> class Person {
>> var name: String = ""
>> var age: Int = 99
>> var friends: Array[Person] = Array()
>> }
>>
>> But maybe that's not what you wanted?
>>
>> Cheers
>>
>> -- Martin
>>
--
lift, the secure, simple, powerful web framework http://liftweb.net
Collaborative Task Management http://much4.us
RSS Feed