Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

practical use for undef [duplicate]

Tags:

ruby

undef

Possible Duplicate:
undef - Why would you want to undefine a method in ruby?

Can anyone lay out a practical use for undef in ruby? I'm coming from languages like javascript and python that don't have it built in. You could of course simulate it in a language like javascript:

var obj = { func:function(){alert("works")} }
obj.func() // -> "works"
delete(obj["func"])
obj.func() //->obj.func() is not a function

but I've never really had use for that. Are there some common situations where undef is actually useful?

EDIT -- Just came across this in the book "The Ruby Programming Language":

Another technique to prevent copying of objects is to use undef to simply remove the clone and dup methods. Yet another approach is to redefine the clone and dup methods so that they raise an exception with an error message that specifically says that copies are not permitted. Such an error message might be helpful to programmers who are using your class.

like image 605
chalmers Avatar asked Dec 17 '22 18:12

chalmers


2 Answers

I can only say that I've never had a use for it in 5 years. Perhaps more usefully, grepping through the entire source of rails shows only 7 instances and they're all meta-programming related. (undef_method has rather more instances at 22). It appears to be useful for testing the behaviour of classes with and without modules mixed-in.

Hopefully someone can point out some more conventional uses for it.

EDIT See this previous question: undef - Why would you want to undefine a method in ruby?

like image 113
noodl Avatar answered Jan 05 '23 06:01

noodl


Blocking a child class from calling a method defined in the superclass (this is actually used in mongrel's setup.rb) (paraphrasing):

class Item
  def set
    do_something
  end
end

class ExecItem < Item
  undef set
end

Though I guess undef_method would have the same effect.

like image 38
zetetic Avatar answered Jan 05 '23 07:01

zetetic