In case anybody's interested, I'm messing around with a ClojureScript
wrapper type that can implement various core protocols, e.g.:

(deftype ClojureObject [o]
  IFn
  (-invoke [_] (.invoke o))
  (-invoke [_ a] (.invoke o a))
  ;; etc
  )



On 31 December 2012 09:56, Stuart Campbell <stu...@harto.org> wrote:

> OK, unless there's some way to set arbitrary properties on a Java object,
> I guess this isn't possible...
>
> ClojureScript:cljs.user> (aset js/Packages.clojure.lang.IFn "prototype"
> (js/Object.))
> "Error evaluating:" (aset js/Packages.clojure.lang.IFn "prototype"
> (js/Object.)) :as "(Packages.clojure.lang.IFn[\"prototype\"] = (new
> Object()));\n"
> org.mozilla.javascript.EvaluatorException: Java class "clojure.lang.IFn"
> has no public instance field or method named "prototype". (<cljs repl>#9)
>     at <cljs repl>:9 (anonymous)
>     at <cljs repl>:9
>
>
> On 31 December 2012 09:41, Stuart Campbell <stu...@harto.org> wrote:
>
>> Ah, you're right -- thanks. That leads me to another error:
>>
>> ClojureScript:cljs.user> (extend-type js/Packages.clojure.lang.IFn IFn
>> (-invoke ([this] (.invoke this))))
>> "Error evaluating:" (extend-type js/Packages.clojure.lang.IFn IFn
>> (-invoke ([this] (.invoke this)))) :as
>> "Packages.clojure.lang.IFn.prototype.cljs$core$IFn$ =
>> true;\nPackages.clojure.lang.IFn.prototype.call = (function
>> (this_sym23394){\nvar this_sym23394__23395 = this;\nvar this__23396 =
>> this_sym23394__23395;\nreturn
>> this__23396.invoke();\n});\nPackages.clojure.lang.IFn.prototype.apply =
>> (function (this_sym23392,args23393){\nreturn
>> this_sym23392.call.apply(this_sym23392,[this_sym23392].concat(args23393.slice()));\n});\n"
>> org.mozilla.javascript.EcmaError: TypeError: Cannot set property
>> "cljs$core$IFn$" of null to "true" (<cljs repl>#25)
>>     at <cljs repl>:25 (anonymous)
>>     at <cljs repl>:25 (anonymous)
>>     at <cljs repl>:25
>>
>> I'll keep investigating.
>>
>> On 30 December 2012 12:31, David Nolen <dnolen.li...@gmail.com> wrote:
>>
>>> I think you've just formatted your code incorrectly. Did you try
>>> something like this?
>>>
>>> (extend-type js/Packages.clojure.lang.IFn
>>>   IFn
>>>   (-invoke
>>>     ([this] (.invoke this))
>>>     ([this a] (.invoke this a)))
>>>   )
>>>
>>>
>>>  On Sat, Dec 29, 2012 at 8:22 PM, Stuart Campbell <stu...@harto.org>wrote:
>>>
>>>>  Hi all,
>>>>
>>>> I'm toying with a way to use Clojure objects from a Rhino-based
>>>> ClojureScript environment (https://github.com/harto/rhino-bridge).
>>>>
>>>> I've been able to export a Clojure function into the ClojureScript
>>>> environment without too much difficulty. Ideally, I'd like to be able to
>>>> call that function as if it were a regular ClojureScript function.
>>>>
>>>> I was hoping I could do something like:
>>>>
>>>> (extend-type js/Packages.clojure.lang.IFn
>>>>   IFn
>>>>   (-invoke [this] (.invoke this))
>>>>   (-invoke [this a] (.invoke this a))
>>>>   ;; etc
>>>>   )
>>>>
>>>> However, this yields an error that I don't quite understand:
>>>>
>>>> java.lang.UnsupportedOperationException: nth not supported on this
>>>> type: Symbol
>>>>     at clojure.lang.RT.nthFrom(RT.java:846)
>>>>     at clojure.lang.RT.nth(RT.java:796)
>>>>     at
>>>> cljs.core$extend_type$assign_impls__7365$fn__7377$adapt_params__7380.invoke(core.clj:486)
>>>>     at clojure.core$map$fn__4087.invoke(core.clj:2434)
>>>>
>>>> In fact, I'm not sure this will work at all, since (type) doesn't
>>>> appear to work with non-native JS objects.
>>>>
>>>> Is the extend-type method feasible?
>>>>
>>>> Cheers,
>>>> Stuart
>>>>
>>>> --
>>>> 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 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 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