我在网上某处看到了这段代码:
ruby -pe 'gsub /^\s*|\s*$/, ""'
Run Code Online (Sandbox Code Playgroud)
显然,这段代码从STDIN的每一行中删除了前导和尾随空格.
我理解正则表达式和替换,没问题,但我没有得到的是该方法如何gsub接收一个对象来采取行动.我明白这个-p标志将整个事情包裹在一个while gets; print; ... ; end块中,但是如何gsub接收字符串来处理呢?至少,不应该是一个$_.gsub(..)相反?如何将当前输入行"神奇地"传递给gsub?
这些类似Perl的单行代码是否以稍微不同的方式解释?我正在寻找与传统的基于脚本的Ruby代码的差异的一般概念.我很害怕,还没有找到一套全面的资源.
事实证明,这是一个在Kernel上定义的实例方法,只有在使用-p或-n标志时才会神奇地启用它.
ruby -pe 'puts method(:gsub);'
#<Method: Object(Kernel)#gsub>
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档.
我发现其他的神奇方法是chop,print和sub.
神奇的方法都是$_隐式发送的.