Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6811811
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T20:22:21+00:00 2026-05-26T20:22:21+00:00

I am trying to use class_eval to create a method metaprogrammatically if the method

  • 0

I am trying to use class_eval to create a method metaprogrammatically if the method that’s called starts with “plus”. However, I’m having trouble putting together the actual syntax of the class_eval

class Adder
  def initialize(my_num)
    @my_num = my_num
  end
  def my_num
    @my_num
  end
end
    def method_missing(meth, *args)
        my_meth = meth.to_s
        #puts my_meth[0, 4]
        if my_meth[0, 4] == "plus" then #/plus\d/ then
            num = my_meth.slice(/\d+/).to_i

            original_num = self.my_num.to_i
            my_sum = original_num + num
            class_eval{ eval{"def #{meth}; @my_int = #{my_sum} return @my_int end\n"}}
        end
        else
        super
    end


y = Adder.new(12)
puts y.plus10

When the plus10 (or whatever number) is called, the newly created method should add that number to the integer that’s being called on, and produce the new sum.

Thanks

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T20:22:22+00:00Added an answer on May 26, 2026 at 8:22 pm

    Try this:

    class Adder
      def initialize(my_num)
        @my_num = my_num
      end
      def my_num
        @my_num
      end
      def method_missing(meth, *args)
        my_meth = meth.to_s
          if my_meth[0, 4] == "plus" then
            num = my_meth.slice(/\d+/).to_i
            original_num = my_num
            my_sum = original_num + num
            self.class.class_eval do
              define_method "#{meth}" do
                my_int = my_sum
              end
            end
            send meth
          else
            super
          end
      end
    end
    y = Adder.new(12)
    puts y.plus10  # => 22
    

    UPDATE

    and this is slightly improved version:

    class Adder
      def initialize(num)
        @num = num
      end
    
      def method_missing(name, *args)
        name_string = name.to_s
        if /^plus(\d+)/ =~ name_string
          sum = Regexp.last_match(1).to_i + @num
          self.class.class_eval do
            define_method "#{name}" do
              sum
            end
          end
          send name
        else
         super
        end
      end
    end
    
    y = Adder.new(12)
    puts y.plus10  # => 22
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm trying to use the DSACryptoServiceProvider class with C# to create two DLLs: one
Possible Duplicate: How do I use define_method to create class methods? I am trying
I'm trying to use Groovy to create an interactive scripting / macro mode for
I am trying to use a class based implementation of Win32 threads to create
I'm trying to use class names to change the color of a link after
I am trying to use Class::DBI with Catalyst::Plugin::Authentication::Store::DBIC. The example given on CPAN does
I'm trying to use a class within a T4 template in VS2008. Here is
I am trying to use a class from a C# assembly in vb.net. The
Trying to use an excpetion class which could provide location reference for XML parsing,
I'm trying to use the WebClient class to download a html file from another

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.