Uniform Function Call Syntax(UFCS) and @property

spir denis.spir at gmail.com
Fri Mar 4 13:18:50 PST 2011


On 03/04/2011 06:26 PM, Michel Fortin wrote:
> Another idea someone proposed (I can't find the exact post to give proper
> credit) would be to allow having a parameter named 'this'. This would allow the
> creation of non-member functions using the member syntax as with the Uniform
> Function Call Syntax but without the "Uniform" part: only function specially
> labeled this way would be eligible to the member call syntax. This would solve
> our property problem, but is dependent on how UFCS is implemented.

Lua version (center on "add a new method"):

-- hand-baked Lua OO type
Point = {
     this = function (p, coords)
         point = {x=0, y=0}
         for k,v in pairs(coords) do
             point[k] = v
         end
         return setmetatable(point, Point)
     end ,
     __tostring = function (point)
         return "Point(" .. point.x .. "," .. point.y .. ")"
     end ,
}
Point.__call = Point.this
Point.__index = Point
setmetatable(Point, Point)

-- a point
point = Point {x=1, y=2}
print (point)           --> Point(1,2)

-- add a new method
Point.move = function (point, offset)
     point.x = point.x + offset.x
     point.y = point.y + offset.y
end

-- applicate added method (special syntax ':')
point:move {x=3, y=4}
print (point)           --> Point(4,6)


Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d mailing list