有人问是否可以定义一个带有多个参数的setter方法,但是搜索它似乎是不可能的。
我说setter方法不能接受多个参数,但后来考虑过它并且想知道我是否真的可以定义一个setter而不是不带参数:
class Test
def self.args=
end
end
Ruby接受它,可能因为没有理由不接受它。我可以用它做任何事吗?
答案 0 :(得分:1)
您可以执行任何其他没有参数的实例方法都可以执行的操作。如果你在=
运算符的上下文中调用它,那么我认为你不能将它传递给一个块,但你可以通过与{{1}一起传递一个块}}
但请注意,您的示例在singleton类上定义了setter方法,而setter方法通常定义为实例方法。
答案 1 :(得分:1)
你不能将它用作制定者,而且它作为一般方法甚至不是很有用。甚至使该方法运行的唯一方法是使用send
或创建一个Method实例,因为正常的消息发送语法不允许消息包含“=”字符。
所以你在技术上可以拥有这样的代码:
class Foo
def bar=()
puts "Hi, mom!"
end
end
foo = Foo.new
foo.send(:bar=)
它会打印出“嗨,妈妈!”如预期的那样。
但你能用它做点什么吗?好吧,我想你可以吹嘘你所有朋友关于你不知不觉的左撇子。除此之外,不,它对任何事情都没有用。