Pla*_*fan 3 ruby regex constants
我正在编写一些测试来验证要在 Ruby 控制台应用程序中使用的一些正则表达式的行为。我正在尝试在不打算实例化的类上定义常量类级别字段(只是应该在其上定义常量 RE 值。我无法使用 Ruby 习惯用法正确定义它(我有 C++/C# 背景)。
首先我尝试定义一个类常量
class Expressions
# error is on following line (undefined method DATE)
Expressions.DATE = /(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})/
end
class MyTest < Test::Unit::TestCase
def setup
@expression = Expressions::DATE
end
def test
assert "1970-01-01" =~ @expression
end
end
Run Code Online (Sandbox Code Playgroud)
这只会产生错误:未定义方法 `DATE=' for Expressions:Class (NoMethodError)
接下来我尝试了类属性:
class Expressions
@@Expressions.DATE = /(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})/
end
class MyTest < Test::Unit::TestCase
def setup
# NameError: uninitialized constant Expressions::DATE here:
@expression = Expressions::DATE
end
def test
assert "1970-01-01" =~ @expression
end
end
Run Code Online (Sandbox Code Playgroud)
这会产生 NameError: uninitialized constant Expressions::DATE 错误。
我知道我可以只定义要用作实例的类的属性,但这效率低下并且不是问题的正确解决方案(只是一个 hack)。(在 C++ 中,我会使用静态常量,完成)
所以我真的被卡住了。我需要知道在 Ruby 中定义需要在其他类中使用的常量正则表达式的正确方法是什么。我在定义、初始化及其使用方面遇到问题,
谢谢。
Ruby 中的常量类似于变量,只是它的值应该在程序运行期间保持不变。Ruby 解释器实际上并不强制常量的恒定性,但如果程序更改常量的值,它会发出警告。从词法上讲,常量的名称看起来像局部变量的名称,只是它们以大写字母开头。按照惯例,大多数常量都以大写字母书写,并用下划线分隔单词 LIKE_THIS。Ruby 类和模块名称也是常量,但它们通常使用首字母大写和驼峰命名,LikeThis。
Ruby 编程语言:David Flanagan;松本幸弘。
这应该有效:
class Expressions
DATE = /.../
end
class MyTest < Test::Unit::TestCase
def setup
@expression = Expressions::DATE
end
# ...
end
Run Code Online (Sandbox Code Playgroud)