On Sun, May 20, 2012 at 2:05 PM, Warren Lynn <wrn.l...@gmail.com> wrote:
> I don't quite understand where I introduced the rigidity. And what I
> described is not a true inheritance as in traditional OO languages
> (hence the quoted "inheritance"). It seems just some simple almost
> syntax-level change (maybe some macros can solve it) will make
> people's life a little bit easier

"2. Functions delay binding; data structures induce binding. Moral:
Structure data late in the programming process."
-- http://www.cs.yale.edu/quotes.html

putting your data in specific types like Employee and Person instead
of just using maps is a kind of rigidity

> On May 20, 4:55 pm, Kevin Downey <redc...@gmail.com> wrote:
>> On Sun, May 20, 2012 at 1:50 PM, Warren Lynn <wrn.l...@gmail.com> wrote:
>> > Thanks. That will work. But I wish things can get more concise and
>> > elegant.
>>
>> > I like the Python idea of "make simple things easier and difficult
>> > things possible". So I think the limited "inheritance" I mentioned can
>> > make a large portion of use cases easier, without sacrificing any of
>> > Clojure's more advanced features. Basically, I wish to have something
>> > like:
>>
>> > 1. (defrecord Employee [x y] :base Person)
>> >     so I can have all data fields in Person also included in Employee
>> > 2. (extend-type Employee
>> >      GetName :reuse Person)
>> >    so I simply reuse GetName implementation from Person
>>
>> you have no reason to give up the flexibility of maps and data for the
>> rigidness of types and an object graph.
>>
>> {:employee? true} beats the above hands down.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> > Maybe there is already something like that I am not aware of. But if
>> > not, I really hope more people will concur and so it will get into the
>> > language.
>>
>> > More broadly, I think the success of a language depends on two things:
>> > 1. Flexible so it is not just usable on trivial problems.
>> > 2. Provides/encourages good patterns so the flexibility won't get out
>> > of control, especially on large projects.
>>
>> > Of course the challenge is how to balance these two. OO provides very
>> > natural patterns for people to work with, so I think we should embrace
>> > it as much as possible without sacrificing the unique flexibility/
>> > power Clojure brings.
>>
>> > On May 20, 1:56 pm, Vinzent <ru.vinz...@gmail.com> wrote:
>> >> You can reuse methods by putting them in a map and then just merging it
>> >> with the new methods:
>>
>> >> (extend Employee
>> >>         AProtocol
>> >>         (merge default-implementation {:new-function (fn ...)}))
>>
>> >> The problem is that you can't reuse methods defined inline, i.e. you can't
>> >> say "my record implements this protocol just like that other record".
>>
>> >> воскресенье, 20 мая 2012 г., 23:22:55 UTC+6 пользователь Warren Lynn
>> >> написал:
>>
>> >> > So from what I read  the philosophy of Clojure discourages inheritance
>> >> > on concrete data types. However, maybe I am too entrenched in my OO
>> >> > thinking, how do I define a new record type that includes all the data
>> >> > members of another record type? I am thinking about the classic
>> >> > Employee/Person example.
>>
>> >> > If I can define a record of Employee with Person's data members
>> >> > included, even that is not true inheritance (as no protocols of
>> >> > "Person" will be automatically extended to "Employee"), I need that
>> >> > for function re-use (so a function working on Person will
>> >> > automatically work on Employee because Employee is guaranteed to have
>> >> > all the data members in Person).
>>
>> >> > Also, again, maybe I am too OO minded, is there a way inherit another
>> >> > record type's protocol implementation? That seems to give the best
>> >> > combination of both worlds (OO and functional), so you can either have
>> >> > you own very customized combination of data type/protocols, or use the
>> >> > very common OO pattern. Just like we have both the single-typed
>> >> > dispatching (which is more OO like and covers a large portion of use
>> >> > cases), and more advanced multimethods.
>>
>> >> > Thanks.
>>
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups "Clojure" group.
>> > To post to this group, send email to clojure@googlegroups.com
>> > Note that posts from new members are moderated - please be patient with 
>> > your first post.
>> > To unsubscribe from this group, send email to
>> > clojure+unsubscr...@googlegroups.com
>> > For more options, visit this group at
>> >http://groups.google.com/group/clojure?hl=en
>>
>> --
>> And what is good, Phaedrus,
>> And what is not good--
>> Need we ask anyone to tell us these things?
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en



-- 
And what is good, Phaedrus,
And what is not good--
Need we ask anyone to tell us these things?

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to