Ruby on Rails Monday, October 13, 2014


On 2014-Oct-10, at 12:31 , Mike <local.mat@gmail.com> wrote:

You might want something like this.



class Foo
end

Foo.instance_eval do
  def class_name
    self.name
  end
end


class Bar < Foo
end

class Tar < Foo
end

puts Foo.class_name
#=> Foo

puts Bar.class_name
#=> Bar

puts Tar.class_name
#=> Tar



On Thursday, October 9, 2014 8:27:10 PM UTC-7, Alexandre Calvão wrote:
Is not instance method, is class method... My bad


===================
Alexandre Mondaini Calvão

"Nossa recompensa se encontra no esforço e não no resultado. Um esforço total é uma vitória completa." [Ghandi]

2014-10-10 0:17 GMT-03:00 Alexandre Calvão <apo...@gmail.com>:
Is there a way for me to do that on ruby ?

class Foo
  def self.class_name
  end
end

class Bar < Foo
end

class Tar < Foo
end

Bar.class_name 
= 'Bar'

Tar.class_name
= 'Tar'

I want to get the class name of the class who called the instance method from the parent class.

I tried the code above and it keeps getting me 'Class' as the result.

Is that possible in ruby ?

[]`s

===================
Alexandre Mondaini Calvão

"Nossa recompensa se encontra no esforço e não no resultado. Um esforço total é uma vitória completa." [Ghandi]


Why do anything fancy? An instance know which class it is. Just ask for the .class and then get that Class's .name.

irb2.1.3> class Foo; end
#2.1.3 => nil
irb2.1.3> class Bar < Foo; end
#2.1.3 => nil
irb2.1.3> class Baz < Foo; end
#2.1.3 => nil
irb2.1.3> foo = Foo.new
#2.1.3 => #<Foo:0x007f98940cb528>
irb2.1.3> foo.class.name
#2.1.3 => "Foo"
irb2.1.3> bar = Bar.new
#2.1.3 => #<Bar:0x007f98940b55c0>
irb2.1.3> bar.class.name
#2.1.3 => "Bar"
irb2.1.3> baz = Baz.new
#2.1.3 => #<Baz:0x007f98940b38d8>
irb2.1.3> baz.class.name
#2.1.3 => "Baz"

-Rob

No comments:

Post a Comment