Ruby 关于 method_missing 中的 *args 迷惑

woody1983 · 2013年09月09日 · 最后由 iBachue 回复于 2013年09月09日 · 2920 次阅读

今天看了 ihower 的一个例子 是讲 method_missing 的

class Car
  def go(place)
    puts "go to #{place}"
  end

  def method_missing(name, *args)
    if name.to_s =~ /^go_to_(.*)/
      go($1)
    else
      super
    end
  end
end

car = Car.new
car.go_to_taipei
# go to taipei
car.go_to_shanghai
# go to shanghai
car.go_to_japan
# go to japan

我单独 print 过 args 是空的 所以我不太清楚 他调用 go 函数时 $1是怎么获取的

$1是正则表达式产生的~

#1 楼 @zj0713001

感谢~ 晚上加菜 正则 全然分からない

  name = 'go_to_china'
=> "go_to_china"
   name =~ /^go_to_(.*)/
=> 0
   $1
=> "china"
   $0
=> false

#2 楼 @woody1983 不过不推荐这样用 哈哈~

#3 楼 @zj0713001 确实不推荐 不过这种写法真的很优雅,你还有什么其他实现相同功能并且优雅的写法吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号