ruby 尝试使用实例方法Module#refineお试しでつかってみる。スコープを限定させてクラスのメソッドを改変·拡张するRef:http://www.ruby-doc.org/core

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 尝试使用实例方法Module#refineお试しでつかってみる。スコープを限定させてクラスのメソッドを改変·拡张するRef:http://www.ruby-doc.org/core相关的知识,希望对你有一定的参考价值。

module FizzBuzzExtension
  refine Fixnum do
    def fizz?
      modulo(3).zero?
    end
 
    def buzz?
      modulo(5).zero?
    end
 
    def fizz_buzz?
      fizz? && buzz?
    end
  end
end
 
class FizzBuzz
  using FizzBuzzExtension

  def fizz_buzz(n)
    1.upto(n).map{ |num| fizz_buzz_out(num) }
  end

  private

  def fizz_buzz_out(n)
    if n.fizz_buzz?
      'FizzBuzz'
    elsif n.fizz?
      'Fizz'
    elsif n.buzz?
      'Buzz'
    else
      n
    end
  end
end

f = FizzBuzz.new
p result = f.fizz_buzz(10) # => [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz"]
p result.join(', ') # => "1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz"

p 10.fizz? # => undefined method `fizz?' for 10:Fixnum (NoMethodError)

以上是关于ruby 尝试使用实例方法Module#refineお试しでつかってみる。スコープを限定させてクラスのメソッドを改変·拡张するRef:http://www.ruby-doc.org/core的主要内容,如果未能解决你的问题,请参考以下文章

ruby refined_for_emoji.rb

ruby基础知识之 class&module

ruby module里的self

在 Ruby 中计算中位数

如何像在 Prime 类中一样在 Ruby 中创建默认实例?

ruby moduleの使用方法について