是什么class << self在Ruby中做什么?
有没有办法在Ruby中的模块中创建一个类似于类变量的变量?我的意思是,它可以在不初始化模块实例的情况下访问,但可以更改(与模块中的常量不同).
我刚开始学习Ruby,我无法找到关于类变量方面@@和@之间区别的好解释.如果任何人都可以提供一个基本的直观示例,那将非常棒.它们也可以互换吗?
可以为使用attr_accessor以下方法为实例变量生成的类变量自动生成/启用 getter/setter :
class School
@@syllabus = :cbse
def self.syllabus
@@syllabus
end
def self.syllabus=(_)
@@syllabus = _
end
end
School.syllabus = :icse
School.syllabus # => :icse
Run Code Online (Sandbox Code Playgroud) 我正在编写一些测试来验证要在 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)
这会产生 …
可能重复:
@@ variable在Ruby中意味着什么?
使用double'@'声明对象时有什么区别
@@lexicon = Lexicon.new()
Run Code Online (Sandbox Code Playgroud)
并在Ruby中用单个'@'声明对象?
@lexicon = Lexicon.new()
Run Code Online (Sandbox Code Playgroud) 这是我第一次涉足计算机编程.我选择学习Ruby,我很享受它.但是,我有点困惑的是为什么答案在这段代码中输出不正确.
def addition_function
puts "Which numbers would you like to add?"
@n1 = gets.chomp
@n2 = gets.chomp
@n1 + @n2 == @answer
puts "The sum is... #{@answer}"
end
def subtraction_function
puts "Which numbers would you like to subtract?"
@n1 = gets.chomp.to_i
@n2 = gets.chomp.to_i
@n1 - @n2 == @answer
puts "The answer is... #{@answer}"
end
def multiplication_function
puts "Which numbers would you like to multiply?"
@n1 = gets.chomp
@n2 = gets.chomp
@n1 * @n2 == @answer
puts "The answer is... …Run Code Online (Sandbox Code Playgroud) ruby ×7
class ×2
constants ×1
conventions ×1
eigenclass ×1
javascript ×1
metaclass ×1
module ×1
object ×1
oop ×1
regex ×1
singleton ×1
variables ×1