ruby - 什么时候可以安全地调用 Ruby 中对象的发送方法?

标签 ruby syntax coding-style

我知道在对象上调用 public_send 而不是 send 是一种很好的做法,以免无意中调用私有(private)方法。但是,如果我知道我将要调用的方法肯定是公开的,我可以使用发送吗?我写了这段代码:

[:name, :artist, :album,].each do |attribute|
  define_method "#{attribute}s" do
    @songs.map { |song| song.public_send(attribute) }.uniq
  end
end

如果我在这里用 send 替换 public_send 会被认为是不好的做法吗?

最佳答案

尽可能始终使用 public_send 并避免 send 它会减少您的表面积,并且总体上是一种更好的做法。

String.new.public_send("sleep") # error
String.new.send("sleep") # hangs

在上面的示例中,将 public_send 替换为 send 没问题,但是如果东西被重构了怎么办?更好地建立一种做法,让您承担最少的长期风险。

关于ruby - 什么时候可以安全地调用 Ruby 中对象的发送方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20071837/

相关文章:

ruby - 将验证代码分组到一个 Ruby 方法中是一个坏主意吗?

syntax - 使用多个匹配项时,是否有更简单的方法来绑定(bind)整个匹配项?

android - 主题中的 TextAppearance

oop - 使用复数来命名集合是一种好习惯吗?

c++ - 有人可以告诉我是否命名了我的 C++ 缩进样式吗? (给出的例子)

ruby - 如何访问剪贴板数据以实现自动化?

Ruby类继承问题

ruby - 在 Ruby 中动态定义类方法

haskell - 是否有创建 [Maybe a] 模拟的语法,但类型 (* -> *)

java - 为什么枚举常量必须在枚举类型中的任何其他变量和方法声明之前声明?