每个人都知道创建空数组的两种方法:Array.new
和[]
。你会说,第一个是'标准',第二个是语法糖。通过此方法可以缩短许多不同的对象,例如Hash
甚至String
。
我的问题是:有没有办法为对象定义自己的分隔符?一个例子是<>
。可能是'<' => 'MyObject.new('
和'>' => ')'
这样的别名?
答案 0 :(得分:1)
没有。 (无论如何。)分隔符是解析过程的一部分。
您可以定义运算符,例如<
;这与分隔符不同。例如,您可以重新定义<
以获取块,并使用该块创建类或方法等。但是......我认为不会。
答案 1 :(得分:1)
[]
是数组文字,{}
是哈希文字。 Ruby中有很多这些速记形式。请查看this wikibook以获取更多信息。
没有对象字面值,但您可以使用(source):
a = Struct.new(:foo,:bar).new(34,89)
a.foo # 34
a.bar # 89
答案 2 :(得分:1)
你可以这样做:
class MyObject; end
def [](*args)
MyObject.new *args
end
# but you can't use it directly:
o = [] #=> [] (empty Array)
# you must to refer to self:
o = self[] #=> #<MyObject:0x1234567>
# but since self depends on where are you, you must assign self to a global variable:
$s = self
o = $s[]
# or to a constant:
S = self
o = S[]
# however, in that case it's better to do it in the proper class:
class << MyObject
def [](*args)
new *args
end
end
# and assign it to a single-letter constant to reduce characters:
S = MyObject
# so
o = S[] #=> #<MyObject:0x1234568>
我想不出更紧凑的东西。