我的方法是:
def title=(text, sub_text = 'another piece of text')
self.title = text + sub_text
end
我的代码中的其他地方,我做了类似的事情:
subtext = "enhusiasts"
title = "hello ruby "
如何将subtext
传递给标题设置器功能,以便我的标题变为:
hello ruby enthusiasts
我是否必须编写一个单独的函数来使用此setter?
答案 0 :(得分:1)
虽然以=
结尾的编写器方法没有什么特别之处,但语言的语法不允许使用多个参数调用它们。您可以使用send
:
object.send :title=, title, subtext
但这不是一个干净的解决方案。此外,您的title=
方法是递归的;你应该直接设置一个实例变量。
我推荐这样的东西:
attr_writer :text, :sub_text
def title
text + sub_text
end
# ...
object.text = 'hello ruby '
object.sub_text = 'enthusiasts'
object.title
# => "hello ruby enthusiasts"
答案 1 :(得分:0)
您可以使用self.send('title=', 'string1')
或self.send('title=', 'string1', 'string2')
来调用它。
但你不能以通常的方式称呼title = 'string1', 'string2'
。那是因为解析器不允许它。如果存在=
,则该语句应为identifier = expression
格式。
最好不要在这种情况下用=
命名你的功能。
同样推荐并且是通过插值来连接字符串的约定,即:
self.title = "#{text} #{sub_text}"
代替self.title = text + sub_text
。
这可以防止在文本为零时生成错误。