Ruby 当需要调用方法名时,如何处理字符串#[]?
Ruby 当需要调用方法名时,如何处理字符串#[]?,ruby,string,Ruby,String,String#[]是一种非常有用的方法,但有时不可能使用,特别是对于传递给instance\u eval的代码。例如,使用很棒的rb工具(at),如果我想通过管道将ls-l的输出仅用于获取权限(无可否认,这很可能是无用的,但说明了我的观点),我可以这样做: $ ls -l | rb -l 'split.first' -rw-r--r-- …但是,如果我想对[]执行相同的操作,则它不起作用: $ ls -l | rb -l '[0..10]' 0..10 # ... 在这种情况下,如何使用[]
String#[]
是一种非常有用的方法,但有时不可能使用,特别是对于传递给instance\u eval
的代码。例如,使用很棒的rb
工具(at),如果我想通过管道将ls-l
的输出仅用于获取权限(无可否认,这很可能是无用的,但说明了我的观点),我可以这样做:
$ ls -l | rb -l 'split.first'
-rw-r--r--
…但是,如果我想对[]
执行相同的操作,则它不起作用:
$ ls -l | rb -l '[0..10]'
0..10
# ...
在这种情况下,如何使用[]
操作符(方法)?在这种情况下,必须通过使用通常是多余的方法调用来“欺骗”它,使其做正确的事情。以下是一些方法:
ls -l | rb -l 'self[0..10]'
ls -l | rb -l 'to_s[0..10]'
ls -l | rb -l 'send :[], 0..10'
ls -l | rb -l 'public_send :[], 0..10'
可能最清晰、最自然的方法是使用第一个示例中所示的self
。在这种情况下,必须通过使用通常是冗余的方法调用来“欺骗”它,使其做正确的事情。以下是一些方法:
ls -l | rb -l 'self[0..10]'
ls -l | rb -l 'to_s[0..10]'
ls -l | rb -l 'send :[], 0..10'
ls -l | rb -l 'public_send :[], 0..10'
可能最清晰、最自然的方法是使用第一个示例中所示的
self
。方法有一个不需要解决办法的别名:方法有一个不需要解决办法的别名: