在ruby中,您可以使用<<以下方法追加字符串:
>> "Hello" << "World"
=> "HelloWorld"
Run Code Online (Sandbox Code Playgroud)
那么为什么你不能使用它们>>?
>> "Hello" >> "World"
NoMethodError: undefined method `>>' for "Hello":String
Run Code Online (Sandbox Code Playgroud)
我意识到String没有>>定义方法,但背后的原因是什么?
Pat*_*ith 24
Ruby 1.9.3添加了一个String #prepend方法.
关于添加prepend [1]的提议还包括">>"方法,并且关于该实现的线程有一些讨论[2]:
马茨说:">>是有趣的符号没有考虑它."
索里亚说:"这个补丁已经出来,已经多次讨论过IRC"
但是在线程结束时,结论是接受String #prepend,并且"包括String#>>在内的其他提议正在等待."
我找不到任何关于它的其他讨论......还有其他人吗?
就个人而言,我喜欢它,添加以下内容是微不足道的:
class String
def >> (s)
s.prepend(self)
end
end
Run Code Online (Sandbox Code Playgroud)
结果:
>> "Hello" >> "World"
=> "HelloWorld"
Run Code Online (Sandbox Code Playgroud)
[1] http://bugs.ruby-lang.org/issues/3675
McS*_*tch 19
Ruby的语法不允许像>>你期望的那样实现一个方法.
<<in "Hello" << "World"相当于以下内容:
"Hello".<<("World")
如果你想创建一个prepend方法>>,我希望"Hello" "Hello" >> "World"成为字符串的参数"World":
("Hello")>>."World" 这不是有效的Ruby语法.
如果"World"是"Hello"的参数,那么你只需附加一个像fl00r所示的字符串.别名>>意思相同<<会引起混淆.
这就是为什么你有这个insert方法.如果你想在"World"前插入"Hello",你可以在"World"上调用insert:
"World".insert(0, "Hello ")
这里需要注意的<<是,方法调用就像字符串方法一样length,所以你必须保持类似于常规方法调用的顺序.
Ruby始终从右到左赋值.
但是你可以自己实现它
class String
def >>(s)
s << self
end
end
"Hello" >> "world"
#=> "worldHello"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9915 次 |
| 最近记录: |