我试图尽可能地封装我的类。我不应该像这样使用send方法吗?
class MyClass
def self.join_two_strings(first, second)
new.send(:join_two_strings, first, second)
end
def join_two_strings(first, second)
first + second
end
private :join_two_strings
end
答案 0 :(得分:5)
由于#join_two_strings
实际上不需要任何实例状态,因此它应该只是一个类方法。
class MyClass
def self.join_two_strings(first, second)
first + second
end
end
答案 1 :(得分:0)
是的,有理由不这样做。这是因为它很冗长。为了实现你想要的,你应该像Chris Heald的答案一样编码。 (Chris Heald建议你应该做什么,但不回答你的问题。)
答案 2 :(得分:0)
更准确地说,使用#send来解决问题,这不是冗长,而是模糊了设计意图。有时冗长(例如使用完整的单词而不是缩写)可以揭示设计意图并缩短读者理解代码所需的时间。使用您的代码示例,读者不相信您想要实现的只是加入2个字符串,他们一直在寻找更深层的含义,然后再承认这只是一个复杂的方法来做一个简单的事情(并且可能重构您的代码正如克里斯那样)。至于#send本身,不要害怕它,不要害怕使用它。虽然#send不应该被用作任意地不尊重方法隐私的工具,但另一方面,Ruby方法是消息,你不必担心它是明确的,有理由的话。