可以用... =
格式定义一个方法,如下所示:
class A
def f= x
puts x
end
end
A.new.f = 5
但是,是否可以使用参数以此格式定义方法,以便可以像以下一样使用它?
A.new.f(a, b, c) = 5
修改
您可以使用[]=
class A
def []= x, y, z
puts x, y, z
end
end
A.new[1, 2] = 3
这是一个例外吗?
答案 0 :(得分:2)
A.new.f(a, b, c) = 5
是语法错误,所以肯定不会(这也没有意义;)
[]
只是.send(:[] =,...)的糖,它只是用精美的名字设置的。
您可以使用多个参数定义setter,但使用它的唯一方法是
A.new.send(:f=, "first", "second")
因为解析器不允许像A.new.foo =“first”,“second”这样的语法。
答案 1 :(得分:0)
ruby ...
和..
是用于构造Range
个对象的字符串文字。您可以通过Range
个对象使对象可用。
请参阅http://www.ruby-doc.org/core-1.9.3/Range.html
的第一章EDITED
foo.rb
class A
def ...(a)
p a
end
end
$ ruby foo.rb
foo.rb:2: syntax error, unexpected tDOT3
def ...(a)
^
foo.rb:5: syntax error, unexpected keyword_end, expecting $end
BUT!您可以使用define_method定义名为...
的方法,但您只能通过send
调用它,因此它无用。
$ irb
1.9.3p194 :001 > class A; end
=> nil
1.9.3p194 :002 > A.send(:define_method, :'...') { puts 'hello' }
=> #<Proc:0x007fe1931dbb50@(irb):2 (lambda)>
1.9.3p194 :003 > A.new.send(:'...')
hello
=> nil