World: r3wp
[!REBOL3 Schemes] Implementors guide
older newer | first last |
Pavel 12-Aug-2010 [2146x2] | only for open more files at once |
my RIF needs to work with double files simoutaneously | |
Andreas 12-Aug-2010 [2148] | Pavel, not for me: >> f: open %.vimrc >> open? f == true >> close f >> open? f == false |
Pavel 12-Aug-2010 [2149x3] | I'll check it |
you are right but then f cannot be unset (removed) but I can live with it | |
andreas your open wont do its job I'm sorry | |
Steeve 13-Aug-2010 [2152] | Check this http://sites.google.com/site/rebolish/Home/idx.r |
Pavel 13-Aug-2010 [2153] | thanks steve for inspiration, may I know why you use actor* and not regular actor? |
Steeve 13-Aug-2010 [2154] | several reasons |
Pavel 13-Aug-2010 [2155] | Anyway I'm partially succesfull with rif:// scheme, I can open multiople files from port: open rif://data/file, I can close multi files with clos port, I can write port to-binary "some record". What is difficult is to pass argument (number of wanted record) to read actor. it seems read acor accept only port. Any hint? |
Steeve 13-Aug-2010 [2156x2] | I use copy and copy/part to real several records |
I don't use read as actor because of that | |
Pavel 13-Aug-2010 [2158x2] | It is only different name of function or has it some deeper reason? (read malfunction?) |
Inside is read/seek/part used of course | |
Steeve 13-Aug-2010 [2160] | deeper reason, you can't add refinement to existing functions (overlapped as actors). I just think copy is more suited to do so (because of /part) |
Pavel 13-Aug-2010 [2161x2] | For RIF more suitable names would be PUT/GET as in basic key-value stores (memcache f.e.) I can try this convention |
Anyway many thanks Steve for hints! | |
Andreas 13-Aug-2010 [2163] | You can also use the /seek and /part refinements to pass arguments to your READ actor. |
Steeve 13-Aug-2010 [2164] | My convention is to simulate the behavior of a standard block (I called my schemle virtual-block). So it's the main reason why I don't use read or write but copy/append instead |
Pavel 13-Aug-2010 [2165x2] | Seems the standard functions are overloaded somehow even when you writes your own, (because you want different functionality of course) aah deep lake, deep lake |
Steeve your virtual block is more persisten block isnt it? ;) | |
Steeve 13-Aug-2010 [2167x2] | true |
there are lot of rooms for improvement in my code, perhaps some day... | |
Pavel 13-Aug-2010 [2169x4] | OK I'll try to finish simple rif:// scheme and update rif.r in rebol.org thanks guys for hepl! Documentation should be improved in file schemes, there is almost nothink. |
nothing sorry | |
Another curriosity when I defined actors put/get when used port returns error message "no put actor" | |
Anyway when defined /seek refinement the sheme start to work as expected | |
Graham 13-Aug-2010 [2173x3] | I don't think you can define your own actors ... |
You're limited to the ones defined ... | |
When you use an actor like 'open, it checks to see if the actor is defined in the network scheme and invokes that. | |
Pavel 13-Aug-2010 [2176] | The functions Steeve mimick for his virtual block scheme are not originaly actors but works for him |
Graham 13-Aug-2010 [2177] | Let me rephrase that .. you can't define an actor if that word is already in use |
Pavel 13-Aug-2010 [2178] | What? that is exactly what Steeve does if I understand |
Graham 13-Aug-2010 [2179] | which actor is that? |
Pavel 13-Aug-2010 [2180] | the funtions defined in actor object aren't actually actors? |
Graham 13-Aug-2010 [2181x3] | ;** MISSING !!! native FOREACH has not port! as parameter |
so they can't be used actors | |
You can use them as local functions .. just not as actors | |
Steeve 13-Aug-2010 [2184] | the allowed actors are the function with port! as parameter |
Andreas 13-Aug-2010 [2185] | action!s, to be precise |
Graham 13-Aug-2010 [2186] | and if they don't take a port, you can't use them without redefining their behaviour |
Pavel 13-Aug-2010 [2187] | ok i'll try to understand :-( my scheme works used port: open rif:// ... read/seek port 1 but don't work the easy way: read rif://data/file 1, cant access locales |
Andreas 13-Aug-2010 [2188x2] | locales? |
you can easily make `read/seek rif://data/file 1` work, by creating a custom open? actor and using that in your read actor | |
Pavel 13-Aug-2010 [2190x2] | I use locales to stor opened files (I need two files ) |
Andreas any simple example of open? ? | |
Andreas 13-Aug-2010 [2192] | Assuming you store port-local state in port/state, you can simply check port/state for not being none. |
Pavel 13-Aug-2010 [2193] | isn't it the right way? : actor: [ open: func [port [port!] /local path ] [ parse port/spec/ref [thru #":" 0 2 #"/" path:] append port/spec compose [path: (to-file path)] port/locals: [] either (0 = length? port/locals) [ append port/locals open/seek rejoin [port/spec/path ".dat"] append port/locals open/seek rejoin [port/spec/path ".idx"] ][ port/locals/1 open/seek rejoin [port/spec/path ".dat"] port/locals/2 open/seek rejoin [port/spec/path ".idx"] ] return port |
Andreas 13-Aug-2010 [2194x2] | you'll most likley want `port/locals: copy []` |
but based on that, your open? actor would simply be: `open?: func [port [port!]] [not none? port/locals]` | |
older newer | first last |