【发布时间】:2015-08-13 08:46:13
【问题描述】:
我有一个类公开两个接口方法client_options 和user_options,在这个祖先级别,它们等价于default_options。我不希望其他开发者直接实现default_options,因此它是私有的。
class Foo
def client_options
default_options
end
def user_options
default_options
end
private
def default_options
{ foo: :bar }
end
end
为了节省一些代码行,我想给方法起别名:
class Foo
alias_method :client_options, :default_options
alias_method :user_options, :default_options
private
def default_options
{ foo: :bar }
end
end
但alias_method 只给公共方法起别名。
我找到了如何为 this blog 上的私有方法设置别名:
class Foo
def default_options
{ foo: :bar}
end
private :default_options
alias_method :client_options, :default_options
public :client_options
end
但是,它有点不可读。
是否有更直接的解决方案来给私有方法取别名?
【问题讨论】:
-
如果我要实现
Foo子类,我会很感激明确的方法定义。使用alias_method可能会节省一两行,但它会使您的课程更难理解。 -
在我看来,如果我从字面上计算代码行数,那么每个答案都是更多行(或最多少 1 行),只需像你一样编写第一个公共方法并为第二个加别名。由于这也比任何更复杂的建议更具可读性,为什么不这样做呢?
标签: ruby alias-method