Object Reference in Variable?

Eric Chatonet eric.chatonet at sosmartsoftware.com
Fri Sep 26 11:57:10 EDT 2008


Bonsoir Richard,

As I said in a previous post, it seems that you *must* require or set  
a property.
In your example you don't get or set a property.
See the quote below.

Le 26 sept. 08 à 11:28, Eric Chatonet a écrit :

> Bonjour Scott,
>
> The rule is rather simple when working with long IDs or long names:
> You *must* require a property :-)
> <number of lines of> is not strictly a property but <number of  
> lines of the text of> is because <text> is a property but <lines>  
> is just a keyword.

Le 26 sept. 08 à 17:18, Richard Gaskin a écrit :

> Scott Rossi wrote:
>
>> Recently, Richard Gaskin wrote:
>>> The only one I can think of offhand is "value", which executes at  
>>> about
>>> the same speed as "do":
>>
>>>     put the long id of field 1 into tField
>>>     put the number of lines of value(tField)
>> I would say the benefit of this is being able to avoid writing out
>> complicated do statements.  Nice.
>> But, while something like this works:
>>   put the number of lines of value(tField)
>> Rev refuses to compile this:
>>   delete line 2 of value(tField)
>> Error reads: Commands: missing ','
>> Any idea why?
>
> First, let me chime in with the others who suggest putting the long  
> id of the field into a variable, and using property settings to  
> access it.  FWIW I find that simple and consistent, and generally  
> faster than using the value function (which can't precompile its  
> operation, so it runs with similar speed to "send" or "do",  
> measurably slower than compilable expressions).
>
> IMNSHO, the issue here is the ambiguous syntax HyperCard  
> introduced, which Rev attempts to follow faithfully.  While it's  
> convenient to be able to refer to a field's contents by referring  
> to the field, it sometimes raises questions about which you're  
> going to get.
>
> I'm not advocating that we ditch it, or even implying it's  
> necessarily A Bad Thing, just noting that the intention of  
> providing usability in syntax sometimes comes at the cost of  
> learnability.  Ambiguity is the devil's playground. :)
>
> Experimenting with how the compiler handles that expression, I also  
> find that this won't even compile:
>
>   delete line 2 of the text of tField
>
> We're using a property specifier, so why not?
>
> It seems the "get" and "set" commands for properties are the  
> unambiguous ones, and attempting to use chunk expressions with  
> other commands (such as "delete") cause them to operate on the  
> string which is the object reference, rather than the contents of  
> the referenced object.
>
> So you could write instead:
>
>   get the text of tField
>   delete line 2 of it
>   set the text of tField to it
>
>
> To force the compiler to understand that a particular var is an  
> object reference and not a string, we might consider the  
> possibility of allowing an optional type specifier for the  
> variable, a la:
>
>   put the long id of fld 1 into tField as object
>
> That would tell the compiler to always treat tField as an object  
> reference, and never attempt string operations on it.
>
> It does rather change the flavor of the language to introduce  
> types, however, so I'm not convinced it's an optimal solution.
>
> For the moment I'd just do the three-line alternative and move on....
>
> -- 
>  Richard Gaskin
>  Managing Editor, revJournal



Best regards from Paris,
Eric Chatonet.
----------------------------------------------------------------
Plugins and tutorials for Revolution: http://www.sosmartsoftware.com/
Email: eric.chatonet at sosmartsoftware.com/
----------------------------------------------------------------





More information about the use-livecode mailing list