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

方法有一个不需要解决办法的别名:

方法有一个不需要解决办法的别名: