Project

General

Profile

Actions

Feature #9060

closed

"Assignment" operator overloading

Added by popoxee (Bruce Metz) over 10 years ago. Updated over 10 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:58073]

Description

=begin
I understand assignment in ruby is assigning an object to the variable. However there are other cases we need to use assignments. For example:

class Foo
end

class Bar < Foo
end

f = Foo.new
b = Bar.new
//Some operations on b

Now we want ((|f|)) to contain the same data as ((|b|)). But if we use (({f = b})), ((|f|)) will not be (({Foo})) any more.
Or we can define a method like (({Foo##loadFromBar})), but (({Foo})) is the super class of (({Bar})) and usually defined before (({Bar}))...

Can we have something like:
f := b
so that ((|f|)) will have the same shared data with ((|b|))?

And we can even load data from other classes by overloading this operator:

class Foo
def :=(f)
@data = f
end
end
f = Foo.new
f := 2.2

We can always achieve this by defining a named method, but this operator can provide some syntax sugar and convenience.
=end

Updated by matz (Yukihiro Matsumoto) over 10 years ago

  • Status changed from Open to Rejected

I am not sure what you want. Could you elaborate?
Doesn't defining regular method like #update do for you?

class Foo
def update(obj)
@data = obj.data
end
attr_accessor :data
end
class Bar < Foo
end

f = Foo.new
b = Bar.new
....
f.update(b)

Reopen if you have objection.

Matz.

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Description updated (diff)
Actions

Also available in: Atom PDF

Like0
Like0Like0