4

メソッド呼び出しが配列として指定されている場合、Rubyでメソッドを連鎖させるにはどうすればよいですか?

例:

class String
  def bipp();  self.to_s + "-bippity"; end
  def bopp();  self.to_s + "-boppity"; end
  def drop();  self.to_s + "-dropity"; end
end

## this produces the desired output
##
puts 'hello'.bipp.bopp.drop #=> hello-bippity-boppity-dropity

## how do we produce the same desired output here?
##
methods   =   "bipp|bopp|drop".split("|")
puts 'world'.send( __what_goes_here??__ ) #=> world-bippity-boppity-droppity

[Ruby 純粋主義者への注意: この例では文体の自由が取られています。セミコロン、括弧、コメント、および記号に関する好ましい使用法については、Ruby スタイル ガイド (例: https://github.com/styleguide/ruby) を参照してください]

4

2 に答える 2

12

Try this:

methods   =   "bipp|bopp|drop".split("|")
result = 'world'
methods.each {|meth| result = result.send(meth) }
puts result

or, using inject:

methods = "bipp|bopp|drop".split("|")
result = methods.inject('world') do |result, method|
  result.send method
end

or, more briefly:

methods = "bipp|bopp|drop".split("|")
result = methods.inject('world', &:send)

By the way - Ruby doesn't need semicolons ; at the end of each line!

于 2013-04-15T20:48:01.357 に答える