Ruby 如何在'Symbolto_proc'速记中使用字符串而不是符号

Ruby 如何在'Symbolto_proc'速记中使用字符串而不是符号,ruby,symbols,implicit-conversion,proc,Ruby,Symbols,Implicit Conversion,Proc,如何使用保存方法名称的字符串调用map a = (1..10).to_a a.map(&:even?) => [false, true, false, true, false, true, false, true, false, true] 另一种选择是,它使用完整形式的块,并且更通用 foo = 'even?' [1,2,3,4,5].map(&foo.to_sym) => [false, true, false, true, false] 另一种选择是,它使

如何使用保存方法名称的字符串调用map

a = (1..10).to_a
a.map(&:even?)
=> [false, true, false, true, false, true, false, true, false, true]

另一种选择是,它使用完整形式的块,并且更通用

foo = 'even?'
[1,2,3,4,5].map(&foo.to_sym)
 => [false, true, false, true, false]

另一种选择是,它使用完整形式的块,并且更通用

foo = 'even?'
[1,2,3,4,5].map(&foo.to_sym)
 => [false, true, false, true, false]

简写语法不是符号和冒号,而是符号后面的符号和:

a = (1..10).to_a
name = 'even?'
a.map{|b| b.send name} # => [false, true, false, true, false, true, false, true, false, true]
在Ruby中,方法通常由符号引用,因此,如果变量中有符号,则此语法将按预期工作:

(1..10).map(& :even?)
如果您无法控制变量方法名,例如,它是一个参数,我建议您改用常规方法send。它同时适用于符号和字符串

name = :even?
(1..10).map(&name)

简写语法不是符号和冒号,而是符号后面的符号和:

a = (1..10).to_a
name = 'even?'
a.map{|b| b.send name} # => [false, true, false, true, false, true, false, true, false, true]
在Ruby中,方法通常由符号引用,因此,如果变量中有符号,则此语法将按预期工作:

(1..10).map(& :even?)
如果您无法控制变量方法名,例如,它是一个参数,我建议您改用常规方法send。它同时适用于符号和字符串

name = :even?
(1..10).map(&name)


我会去除IRB中的视觉噪音。没用,我不会说没用。它提供了ruby版本,也证明了示例的有效性。有太多的评论,比如它对我不起作用,充斥着评论区,提供了更多的噪音。是的,它提供了ruby版本,但仅此而已。作为回报,它使复制/粘贴/运行代码变得不可能。在我看来,这不值得:我会从IRB中去除视觉噪音。没用,我不会说没用。它提供了ruby版本,也证明了示例的有效性。有太多的评论,比如它对我不起作用,充斥着评论区,提供了更多的噪音。是的,它提供了ruby版本,但仅此而已。作为回报,它使复制/粘贴/运行代码变得不可能。在我看来,这是不值得的:你的意思是所谓的椒盐卷饼冒号:@sawa你编辑了这么多,现在提供的答案甚至都不接近OP最初的要求。@Kyle Yours和Sergio的有意义。事实上,当我第一次读到这个问题时,我错了,你的回答让我知道了真正被问到的问题。然后我对它进行了编辑以使其更清晰。OP称之为符号和冒号是错误的,但这并不重要。问题是关于在这个结构中使用字符串foo。@sawa我指的是标题“而不是符号”,而我的答案只是将字符串转换成符号。。。我认为这是一个错误的答案。不管怎样,你的编辑确实改善了问题,但我认为标题可能会有所不同。@Kyle是的。OP有一个应该使用符号的字符串,并询问如何使用该字符串。你展示了它可以被转换成一个符号,然后被使用。你的意思是所谓的椒盐卷饼冒号:@sawa你编辑得太多了,现在提供的答案甚至与OP最初提出的问题不太接近。@Kyle Yours和Sergio的有意义。事实上,当我第一次读到这个问题时,我错了,你的回答让我知道了真正被问到的问题。然后我对它进行了编辑以使其更清晰。OP称之为符号和冒号是错误的,但这并不重要。问题是关于在这个结构中使用字符串foo。@sawa我指的是标题“而不是符号”,而我的答案只是将字符串转换成符号。。。我认为这是一个错误的答案。不管怎样,你的编辑确实改善了问题,但我认为标题可能会有所不同。@Kyle是的。OP有一个应该使用符号的字符串,并询问如何使用该字符串。您展示了它可以转换为符号,然后使用。由于问题编辑,我的答案变得混乱,最初的问题是如何将ruby速记和:ampersand colon与包含方法名称的变量一起使用?您的答案非常有用且具有教育意义。由于问题编辑,我的答案变得混乱,最初的问题是如何使用ruby速记&:ampersand冒号和一个包含方法名的变量?您的答案非常有帮助,也很有教育意义。