首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby字符串到运算符

Ruby字符串到运算符
EN

Stack Overflow用户
提问于 2013-11-16 14:39:25
回答 2查看 8.5K关注 0票数 18

我有一个数组

代码语言:javascript
复制
operator = ['+', '-', '*', '/']

我想用它们来用四种不同的方法来求解一个方程。我想应该是这样的:

代码语言:javascript
复制
operator.map {|o| 6 o.to_sym 3 } # => [9, 3, 18, 2]

我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-16 14:40:13

使用http://ruby-doc.org/core-2.0.0/Object.html#method-i-public_send方法如下所示:

代码语言:javascript
复制
operator = ['+', '-', '*', '/']
operator.map {|o| 2.public_send o,2 }
# => [4, 0, 4, 1]

使用http://ruby-doc.org/core-2.0.0/Object.html#method-i-methodhttp://ruby-doc.org/core-2.0.0/Method.html#method-i-call的另一种方法

代码语言:javascript
复制
operator = ['+', '-', '*', '/']
operator.map {|o| 2.method(o).(2) }
# => [4, 0, 4, 1]
票数 26
EN

Stack Overflow用户

发布于 2017-02-27 20:05:52

另一种方法是使用try。之所以更倾向于尝试,可能是因为try是一个更具防御性的send版本。

代码语言:javascript
复制
def try(*a, &b)
  if a.empty? && block_given?
    yield self
  else
    __send__(*a, &b)
  end
end

使用try执行此操作如下所示:

代码语言:javascript
复制
operator = ['+', '-', '*', '/']
val_to_be_operated = nil

operator.map { |v| val_to_be_operated.try(v, 2) } 
# => [nil, nil, nil, nil]
operator.map { |o| val_to_be_operated.method(o).(2) } 
# Error

val_to_be_operated = 2 
operator.map { |v| val_to_be_operated.try(v, 2) }
# => [4, 0, 4, 1]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20019668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档