在我的宝石中,我有一个名为Client
的课程,我想这样操作:
client = Client.new
client.content_type('pages').content_type
这意味着我想设置一个属性,然后希望立即将它恢复到同一个链中。这就是我到目前为止所做的:
class Client
attr_reader :content_type
def initialize(options = {})
@options = options
end
def content_type
@content_type
end
def content_type(type_id)
@content_type = type_id
self
end
end
现在,当我尝试运行client.content_type('pages').content_type
时,我得到了:
wrong number of arguments (given 0, expected 1) (ArgumentError)
from chaining.rb:16:in `<main>'
我做错了什么?我该怎么写得正确?
答案 0 :(得分:1)
您的方法名称存在冲突。第二种方法是覆盖第一种方法。要么使用不同的名称,要么合并为两者:
class Client
attr_reader :content_type
def initialize(options = {})
@options = options
end
def content_type(type_id = nil)
type_id ? @content_type : set_content_type(type_id)
end
def set_content_type(type_id)
@content_type = type_id
self
end
end
顺便说一下,这段代码很臭。除非你有充分的理由,否则你不应该这样做。