对于不带参数的setter方法,我该怎么办?

时间:2013-12-12 01:14:12

标签: ruby

有人问是否可以定义一个带有多个参数的setter方法,但是搜索它似乎是不可能的。

我说setter方法不能接受多个参数,但后来考虑过它并且想知道我是否真的可以定义一个setter而不是不带参数:

class Test
  def self.args=

  end
end

Ruby接受它,可能因为没有理由不接受它。我可以用它做任何事吗?

2 个答案:

答案 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=)

它会打印出“嗨,妈妈!”如预期的那样。

但你能用它做点什么吗?好吧,我想你可以吹嘘你所有朋友关于你不知不觉的左撇子。除此之外,不,它对任何事情都没有用。