World: r3wp
[Core] Discuss core issues
older newer | first last |
BrianH 27-Oct-2005 [2559] | If you need to change the childs block, remember to use make block! 0 or copy [] instead of [] . |
Alek_K 27-Oct-2005 [2560x3] | Yes, i know that. |
My question is more "philosophical" - what is better by experience. | |
As for now, I think that providing empty block will be more "compact" | |
BrianH 27-Oct-2005 [2563] | It's better to be forgiving in your dialects - it leads to fewer syntax errors. |
Alek_K 27-Oct-2005 [2564] | be forgiving - what do you mean? |
BrianH 27-Oct-2005 [2565x2] | brb |
From a philisophical standpoint, it is best to be somewhat forgiving in your evaluation of the syntax of data that is input to your function, but exact in the syntax of the data that is ouput from your function. That will make sure that the effect of errors or flexibility in the data is limited to the code that is doing the initial evaluation. This means that if you can figure out from context what a default value is, do so, and then your function will be more usable, particularly when the data may be written by hand. | |
Alek_K 27-Oct-2005 [2567] | Thanks Brian :) |
BrianH 27-Oct-2005 [2568] | It's sort of like the stated philosophy of Unix command line utilities. |
Graham 29-Oct-2005 [2569] | this should be in core cls: does [ print "^(1B)[J" ] |
Graham 30-Oct-2005 [2570] | I am creating some variables dynamically so, they are .. "formvar1" .. "formvarn" how do I unset them? |
Terry 30-Oct-2005 [2571] | unset[ formvar1] |
Graham 30-Oct-2005 [2572] | >> var1: does [ print "hello" ] >> var: join "var" 1 == "var1" so, given 'var, how do I unset var1 ? |
Izkata 30-Oct-2005 [2573] | >> unset to-word var |
Graham 30-Oct-2005 [2574x2] | ahh... |
that seems to work. | |
BrianH 30-Oct-2005 [2576] | While reviewing the action! functions, I noticed the path action. The doc comment says "Path selection.". The parameters aren't typed. Does anyone know what this action does, and how to use it? Or whether it can be called directly at all? |
OneTom 30-Oct-2005 [2577x2] | what are action values anyway? |
imean, where are they documented? | |
DideC 30-Oct-2005 [2579] | help action! |
OneTom 30-Oct-2005 [2580x2] | it only list all the action! values. hey you are just bluffing! :) |
btw, ive seen u invited to the french translation task. im heavily trying to learn rebgui, so u as well can use a nice editor for the qtask lang file ;) | |
Volker 30-Oct-2005 [2582] | path seems to be a "clear find". Do not know about uses. |
OneTom 30-Oct-2005 [2583] | but it keeps the length |
Volker 30-Oct-2005 [2584] | it pokes an 'unset! there. mold then stops. |
OneTom 30-Oct-2005 [2585x2] | yeah, i saw |
and fucks it up somehow, because if i change the unset! to something, the path still stays in a strange state | |
Volker 30-Oct-2005 [2587x2] | I could repair it with a/4: 12 |
maybe could be used to exclude something from mold? To stop this recursive things? | |
OneTom 30-Oct-2005 [2589] | could u show me w an example what mold are u talkin about? |
BrianH 30-Oct-2005 [2590] | OneTom, actions are how type-specific operations are implemented in REBOL. Every datatype has a table of function pointers, one pointer for every action. Every one of those tables are layed out the same, with the function corresponding to the same index being the version of the same function for that specific type. Each action! has an index associated with it - you can see the index like this: >> second :add == 1 When the action! is called, REBOL checks the datatype of the first argument to it and then calls the function at that index into the datatype's table. This is the way that REBOL implements polymorphic native functions, single dispatch on the datatype. But really, you don't need to know any of this. All you need to know is that an action! is like a native!, but with a differently named datatype. |
Volker 30-Oct-2005 [2591] | !> a: [b 1 c 2 d 3] == [b 1 c 2 d 3] !> path a 'c !> a == [b 1 c] !> length? a == 6 !> a/4: 12 == 12 !> a == [b 1 c 12 d 3] |
OneTom 30-Oct-2005 [2592] | :)) it still makes me feel a lot happier knowing all these background info, brianh! thank you for clarifying this |
Volker 30-Oct-2005 [2593x2] | Its a good idea to know about it. Seems its possible to path action! to protocol. at least i made a 'find in a protocol once and got all the refinements. |
to path -> to pass .. | |
BrianH 30-Oct-2005 [2595x3] | It's pretty easy to figure out when you realize that second on an action! returns an integer. Everything else follows from there. |
At this point, I can't imagine what the path action! would be good for. Perhaps it is part of the object! internals? | |
Volker, by protocol do you mean a port type? | |
Volker 30-Oct-2005 [2598x3] | Cant have a use, else i had heard of it :) Practical use: it blocks mold. Recursive data, Code-obfuscation? !> a: context[b: 1 c: 2] path a 'b ?? a a: make object! [ b: end c: 2 ] |
Yes. | |
Would be able to implement find on a port that way. | |
BrianH 30-Oct-2005 [2601] | I'm going to copy my path question to RT Q&A. |
OneTom 30-Oct-2005 [2602] | let us know the answer! paste it here if u got any! |
Gabriele 31-Oct-2005 [2603] | path is internal, and should probably not be exposed. my guess is that it has to do with path evaluation. |
BrianH 31-Oct-2005 [2604x3] | You are probably right that it wasn't intended to be exposed, but you got my curiosity going. What is it used for internally? |
I mean, it says "Path selection." right in the doc comment so that's a good guess :) But how does it help with path selection? How is it used? Just for implementing set-path assignment? | |
For that matter, what types implement the path action? | |
Gabriele 1-Nov-2005 [2607] | i don't have answers. when i noticed it months ago and asked carl, he said it was an internal thing. no more details. |
Geomol 1-Nov-2005 [2608] | I had a problem with SWITCH, and it turned out to be a funny thing with SELECT (see source switch). If you've got a block like this: blk: [1 word "string" 1.2 01:00:00 1-11-2005 any-type! 4] you can do things like this: >> select blk 1 == word >> select blk 1.2 == 1:00 >> select blk 'word == "string" >> select blk 1:00 == 1-Nov-2005 >> select blk 1-11-2005 == any-type! And now the fun (or strange) part: >> select blk any-type! == word It's possible to select on a datatype. The first element in the block (1) is of type any-type!, so I get: word. It's possible to do things like: >> select blk date! == any-type! >> select blk time! == 1-Nov-2005 So how do I select a datatype in a block? I could do this: >> select blk to-word any-type! == 4 or something like this: >> select reduce [file! 1 url! 2] url! == 2 I can cope with this in my code, just found it peculiar. |
older newer | first last |