Right, Gary,

Initially I simply wrote exported functions.

The motivation for experimenting with protocols is so that I can write a 
ClojureScript protocol that mimics, say the iOS UITableViewDataSource 
Objective-C @protocol. Then, with that in place, I can write ClojureScript 
reifications of that protocol to be passed back to Objective-C. It is then 
a simple matter on the Objective-C side to make that reification *be* a 
UITableView's dataSource delegate (with the help of a little reusable 
wrapper Obj-C object around the JSValue.) 

In addition to perhaps keeping things tidy (keeping like methods together), 
it makes it easier to pass multiple @protocol instances back to iOS. 
(Imagine the case of two or more table views on one iOS screen, each with 
their own distinct ClojureScriipt implementation.) 

Also, a lot of this ends up being boilerplate that needs to only be written 
once, and then, I recoup the costs of fleshing out this plumbing by simply 
spitting out a (reify ... ) form whenever needed.

Arguably, none of this is required because all of the UITableViewDataSource 
methods have the tableView as the first argument, which could be used by 
straightforward exported functions to dispatch or otherwise switch to the 
right implementation, which could in turn be a reified protocol. It just 
seems that, since Objective-C *wants* an object as a dataSource, that it 
would be interesting to try to satisfy that need (more or less directly) 
using the facilities available in ClojureScript.

I'll ditch all of this when Apple introduces FunctionalSwift along with 
functional APIs, and the Clojure(Swift) compiler targets that new language. 
:)

- Mike

On Wednesday, June 18, 2014 2:48:33 PM UTC-4, Gary Trakhman wrote:
>
> 'any problem.. fixed.. by another layer of indirection'
>
> You could also just make exportable functions that call the protocols, 
> keeping them more as impl-details, core.cljs does this, and you gain things 
> like varargs (hmm, do protocol-varargs work on cljs? nope: 
> http://dev.clojure.org/jira/browse/CLJS-362 )
>

-- 
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