No, that will not work exactly like Ruby eigenclass, cause eigenclass has a 
priority when method lookup is performed. In Clojure case if instance's 
class has implementation of method, it will be preferred instead of meta 
version. If I understand everything correctly.

четверг, 8 ноября 2018 г., 12:33:10 UTC+2 пользователь Rick Moynihan 
написал:
>
> Cool, so I guess it's the clojure of equivalent of Ruby's eigenclasses:
>
> f = "some object"
> class << f
>   def foo 
>      "new foo method on f"
>   end
> end
>
> f.foo # => "new foo method on f"
>
> It's a shame this mechanism only works for values implementing IMeta, but 
> I understand the JVM is a little prohibitive in this regard.
>
> Even so I suppose the main use of this is that it lets a caller give you a 
> value, and you can return a plussed up version with new capabilities, 
> without having to return a wrapped value.  Wrapped values are sometimes 
> problematic because they introduce new representations of existing types, 
> and this allows an API to return values to the caller that behave the same 
> as what went in.  Neat!
>
> R.
>
> On Tue, 6 Nov 2018 at 15:51, Alex Miller <al...@puredanger.com 
> <javascript:>> wrote:
>
>>
>> On Tuesday, November 6, 2018 at 9:25:31 AM UTC-6, John Schmidt wrote:
>>>
>>> Nice to see continued progress on Clojure 1.10!
>>>
>>> It is not clear to me what metadata extension provides that is not 
>>> already possible with direct definitions or external extensions. Some 
>>> additional background or a small motivating example would be much 
>>> appreciated in clearing up the confusion!
>>>
>>
>> Metadata extension allows you to implement protocols on a per-value basis 
>> (the others are type/class-oriented). This opens up a whole new range of 
>> potential uses for protocols. Rich was already using this approach for the 
>> new datafy/nav functionality - this made it generic for all protocols.
>>
>> Any collection instance can carry metadata, so you can take any 
>> collection instance and dynamically extend a protocol to it by adding 
>> metadata. So if you think about something like Component, which has a 
>> Lifecycle protocol for start/stop, you can now make lightweight components 
>> without needing to make a type or reify:
>>
>> $ clj -Sdeps '{:deps {org.clojure/clojure {:mvn/version "1.10.0-beta5"}, 
>> com.stuartsierra/component {:mvn/version "0.3.2"}}}'
>> Clojure 1.10.0-beta5
>> user=> (require '[com.stuartsierra.component :as component])
>> nil
>> user=> (def c (with-meta {:state :init} 
>>                 {`component/start (fn [c] (assoc c :state :started))
>>                  `component/stop (fn [c] (assoc c :state :stopped))}))
>> #'user/c
>> user=> (component/start c)
>> {:state :started}
>> user=> (component/stop c)
>> {:state :stopped}
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to