相关疑难解决方法(0)

如何根据名称动态调用方法?

当名称包含在字符串变量中时,如何动态调用方法?例如:

class MyClass
  def foo; end
  def bar; end
end

obj = MyClass.new
str = get_data_from_user  # e.g. `gets`, `params`, DB access, etc.
str  #=> "foo"
# somehow call `foo` on `obj` using the value in `str`.
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?这样做是否存在安全风险?

ruby metaprogramming dynamic

94
推荐指数
5
解决办法
7万
查看次数

什么时候Ruby中的'eval`是合理的?

" 'eval'应该是令人讨厌的吗? "启发了这个:

大多数人都认为这eval很糟糕,并且在大多数情况下更优雅/更安全.

所以我想问:如果eval经常误用,是否真的需要作为语言功能?这是邪恶而不是好吗?

就个人而言,我发现它唯一有用的地方是插入配置文件中提供的字符串.

编辑:这个问题的目的是在eval是唯一或最佳解决方案时尽可能多地获得真实案例.所以,请不要进入"应该用语言限制程序员的创造力"的方向.

编辑2:当我说eval,当然我指的是eval字符串,而不是将红宝石块传递给instance_evalclass_eval.

ruby eval

26
推荐指数
5
解决办法
3万
查看次数

在Ruby中动态定义命名类

我正在用Ruby编写内部DSL.为此,我需要以编程方式创建命名类和嵌套类.这样做的最佳方法是什么?我认为有两种方法可以做到这一点:

  1. 使用Class.new创建一个匿名类,然后使用define_method的方法添加到它,最后调用const_set将其添加为命名常量一些命名空间.
  2. 使用某种方式 eval

我已经测试了第一种方式并且它有效,但是对Ruby来说是新手,我不确定将类作为常量是正确的方法.

还有其他更好的方法吗?如果没有,上述哪一项更可取?

ruby dsl metaprogramming metaclass

26
推荐指数
2
解决办法
1万
查看次数

我如何使用class_eval?

我不明白class_eval.

class Module
  def attr_ (*syms)
    syms.each do |sym|
      class_eval %{def #{sym}= (val)
        @#{sym} = val
      end}
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

什么%意思?

怎么class_eval办?

哪里(val)来了?

ruby metaprogramming

20
推荐指数
1
解决办法
1万
查看次数

检查ruby中是否存在模块

例如,我正在从cli上传递的参数中动态定义模块名称 Required::Module::#{ARGV.first}

有没有办法检查该模块是否存在?另外,我怎么会在它上面运行方法而不知道它的确切名称?

ruby

17
推荐指数
3
解决办法
1万
查看次数

从表示局部变量的字符串中获取值

我有一个本地变量名称作为字符串,需要获取其值.

variable = 22
"variable".to_variable?
Run Code Online (Sandbox Code Playgroud)

如何22从字符串中获取值?

ruby local-variables

9
推荐指数
2
解决办法
5010
查看次数

将字符串转换为 ActiveSupport::Duration

如何将字符串转换为 ActiveSupport::Duration?

在 Rails 控制台中,此代码有效

Date.today + 1.month (or 22.days)
Run Code Online (Sandbox Code Playgroud)

但这不起作用

Date.today + '1.month' 
Run Code Online (Sandbox Code Playgroud)

它说类型错误:预期数字

“1.month”来自数据库记录。

ruby ruby-on-rails

7
推荐指数
1
解决办法
5010
查看次数

如何在ruby中将ruby格式的json字符串转换为json哈希?

我想访问像哈希对象的json字符串,以便我可以使用键值来访问json temp["anykey"].如何将ruby格式的json字符串转换为json对象?

我有以下json字符串

temp = '{"accept"=>"*/*", "host"=>"localhost:4567", "version"=>"HTTP/1.1", 
       "user_agent"=>"curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3", 
       "http_token"=>"375fe428b1d32787864264b830c54b97"}'
Run Code Online (Sandbox Code Playgroud)

ruby

4
推荐指数
3
解决办法
1万
查看次数

将字符串转换为关键字

我们可以轻松地将关键字转换为字符串:

true.to_s
=> "true"
Run Code Online (Sandbox Code Playgroud)

但是如何将字符串转换为关键字?

ruby parsing keyword

3
推荐指数
1
解决办法
2807
查看次数

字符串哈希哈希/数组

我有这个字符串,我需要转换为哈希:

str = '{:gender=>{:content=>"male"}, :names=>[{:first=>"Atair", :last=>"Goron"}], :addresses=>[{:country=>"GB", :state=>"ENG", :city=>"London"}], :emails=>[{:address=>"agoron@keolis.com", :address_md5=>"971b2fd0b83c900a5ca62c91dab80dd9"}, {:address=>"atair.godon.75@facebook.com", :address_md5=>"a0d958c1396300a344356d57b6836f9e"}], :jobs=>[{:title=>"Chief Executive Officer", :organization=>"Kolis UK and Eire"}, {:title=>"Deputy Managing Director", :organization=>"Kolis UK", :date_range=>{:start=>"2008-04-01", :end=>"2010-04-01"}}, {:title=>"Project Director", :organization=>"Keolis UK", :date_range=>{:start=>"2004-04-01", :end=>"2008-04-01"}}, {:title=>"Strategic Planning Director", :organization=>"Eurostar", :date_range=>{:start=>"2002-04-01", :end=>"2004-04-01"}}, {:title=>"Commercial Director, Business Markets", :organization=>"Eurostar", :date_range=>{:start=>"1999-11-01", :end=>"2002-04-01"}}, {:title=>"Brand Manager", :organization=>"Eurostar", :date_range=>{:start=>"1998-06-01", :end=>"1999-11-01"}}, {:title=>"Business Forecasting Manager", :organization=>"Eurostar", :date_range=>{:start=>"1997-08-01", :end=>"1998-06-01"}}, {:title=>"Principal Consultant", :organization=>"Steer Davies Gleave", :date_range=>{:start=>"1995-04-01", :end=>"1997-08-01"}}, {:title=>"Transport Consultant", :organization=>"Sir Alexander Gibb and Part", :date_range=>{:start=>"1990-01-01", :end=>"1995-12-31"}}], :educations=>[{:school=>"U. of London"}, {:school=>"University College London, U. …
Run Code Online (Sandbox Code Playgroud)

ruby

2
推荐指数
2
解决办法
111
查看次数