Spell,也称pattern,idiom


# Around Alias:从一个重新定义的方法中调用原始的,被重命名的版本。
# old_reverse是未改变的原始方法,reverse/new_reverse是改变的方法。
class String
  def new_reverse
    "x:#{old_reverse}"
  end
  alias_method :old_reverse, :reverse
  alias_method :reverse, :new_reverse
end
puts "abc".reverse    #x:cba

# Blank Slate:移除一个对象的所有方法,以便把它们转换成ghost method
class C
  def method_missing(name, *args)
    'a Ghost Method'
  end
  p ancestors      #[C, Object, Kernel, BasicObject]
end
puts C.new.to_s  #返回一个string记录了对象的类和encoding-id#<C:0x00007f9ef0006950>
class D < BasicObject
  def method_missing(name, *args)
    "a Ghost Method"
  end
end
blank_slate = D.new
puts blank_slate.to_s    #返回method_missing方法的return: a Ghost Method

# Class Extension: 通过向singleton class中加入Module来定义class method,是对象扩展的一个特例
class C; end
module M
  def my_method
    'a class method'
  end
end
+ 1) # prints "method"
# Self Yield: 把self传给当前block
class Person
  attr_accessor :name, :surname
  def initialize
    yield self
  end
end
joe = Person.new do |p|
  p.name = 'Joe'
  p.surname = 'Smith'
end
p joe #=>#<Person:0x00007fdc560042b0 @name="Joe", @surname="Smith">

Ruby中有不少方法也是自动把receiver传入块。如:instance_eval ,class_eval, Object#tap


# Singleton Method:

给一个对象定义一个单例方法,也可以extend一个模块。

class Klass
end
k = Klass.new
class << k
  def hello
      "Hello from Mod.\n"
  end
end
p k.hello

# String of code

执行一段表示Ruby代码的字符串

my_string_of_code = "1+1"
p eval(my_string_of_code) #=》2

# Symbol To Proc
# 把一个调用单个方法的块转换成一个符号,一样的写法,目的是更省事

p [1,2,3].map{|x| x.even? }

p [1,2,3].map &:even?.to_proc   #变成proc对象,然后再用&变成代码块

p [1,2,3].map(&:even?)

#=> [false, true, false]

最新文章

  1. Spring Boot CLI安装
  2. vsftpd的主动模式与被动模式
  3. poj1013.Counterfeit Dollar(枚举)
  4. Oracle 触发器,事物
  5. 初见,Devexpress
  6. Mysql slave 状态之Seconds_Behind_Master
  7. delphi 截取指定符号之间的字符串-随机读取
  8. 它们的定义UIAlertView
  9. 用netsh wlan命令行解决“Win10下WLAN不自动登陆”问题
  10. Java中常见的URL问题及解决方案
  11. 响应式网页:用em,rem设置网页字体大小自适应
  12. hive中安装hive_utils模块
  13. VC 任务栏图标闪烁
  14. VB.NET中的DLL编写和调用的最简单示例
  15. Bat 参数去引号(各种去引号的奇葩方式,三种变量互转),普通变量不能直接去掉外层引号
  16. VS2010安装msdn本地帮助
  17. gitlab的安装和基本维护
  18. sqlserver还原数据库
  19. swift版的GCD封装
  20. 基于windowsphone7的控制ppt播放

热门文章

  1. caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?
  2. Selenium2+python自动化54-unittest生成测试报告(HTMLTestRunner)
  3. python webdriver操作浏览器句柄
  4. 页面点击,不是a标签也会刷新原因
  5. Ubuntu系统下使用Jenkins进行项目的自动构建还是项目回滚方法
  6. MySQL数据库----完整性约束
  7. sqlserver 判断各种不存在
  8. Kafka学习之(七)搭建kafka可视化服务Kafka Eagle
  9. Centos下使用php调用shell脚本
  10. xShell终端中文乱码完全解决方法