相关疑难解决方法(0)

动态常量赋值

class MyClass
  def mymethod
    MYCONSTANT = "blah"
  end
end
Run Code Online (Sandbox Code Playgroud)

给我错误:

SyntaxError:动态常量赋值错误

为什么这被视为动态常数?我只是给它分配一个字符串.

ruby

130
推荐指数
4
解决办法
10万
查看次数

如何在没有警告的情况下重新定义Ruby常量?

我正在运行一些Ruby代码,每次日期更改时都会破坏Ruby文件.在文件中,我有不断的定义,比如

Tau = 2 * Pi
Run Code Online (Sandbox Code Playgroud)

当然,它们使解释器每次都显示不需要的"已初始化的常量"警告,所以,我想要具备以下功能:

def_if_not_defined(:Tau, 2 * Pi)
redef_without_warning(:Tau, 2 * Pi)
Run Code Online (Sandbox Code Playgroud)

通过编写我的所有常量定义,我可以避免警告:

Tau = 2 * Pi unless defined?(Tau)
Run Code Online (Sandbox Code Playgroud)

但它不够优雅,有点潮湿(不是).

有更好的方法def_if_not_defined吗?怎么样redef_without_warning

-

谢谢Steve的解决方案:

class Object
  def def_if_not_defined(const, value)
    mod = self.is_a?(Module) ? self : self.class
    mod.const_set(const, value) unless mod.const_defined?(const)
  end

  def redef_without_warning(const, value)
    mod = self.is_a?(Module) ? self : self.class
    mod.send(:remove_const, const) if mod.const_defined?(const)
    mod.const_set(const, value)
  end
end

A = 1
redef_without_warning :A, 2
fail 'unit test' unless A == …
Run Code Online (Sandbox Code Playgroud)

ruby constants redefine redefinition

55
推荐指数
2
解决办法
3万
查看次数

在Ruby中禁止特定警告

我已经看到很多帖子提供-W0标志作为这个问题的答案,但我不想压制所有警告,只是警告特定值.

我正在Ruby 1.8.7上运行非rails应用程序(尽管使用ActiveRecord).我想保留所有警告,除了以下DEPRECATION警告:

Object#id will be deprecated; use Object#object_id

如果那是不可能的,我想抛弃所有弃用警告.至少Java可以让你这样做.Ruby怎么样?

更新:我已经对两个答案进行了投票,但检查了后来的搜索者希望在这里找到的答案.

ruby warnings suppress-warnings

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