出于美观的原因,我想从我的一些类中提供对象实例化的语法,而不是关键字"new".我从来没有尝试过,但我知道这是可能的:例如Matrix gem提供了如下语法:
Matrix [ [1,2], [3,4] ]
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
只需定义一个将调用的具有相同名称(类的名称)的方法.new.
class User
def initialize(name)
@name = name
end
attr_reader :name
end
def User(name)
User.new(name)
end
u = User("Sergio")
u.name # => "Sergio"
Run Code Online (Sandbox Code Playgroud)
注意:我个人不喜欢这种技术.导致难以理解代码."只是看起来更好"的原因并不能成为你的理由.
实际上,它是红宝石中的一种模式,称为"转换方法".如果仔细观察,ruby stdlib中的所有大写方法都会将值从一种形式转换为另一种形式.除非您正在编写转换方法,否则请勿执行此操作.
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |