有没有办法在类之间传递变量? 我有下一个代码。
module Test
class Super
def initialize(name)
@name = name
end
end
class Upper
def test
puts @name
end
end
end
a=Test::Super.new('My name')
b=Test::Upper.new()
b.test()
谢谢!
答案 0 :(得分:1)
不,因为a是该类的实例。给你两个答案;
1)将parents.computeIfPresent(child.getParentId(), (k, v) -> { v.removeChild(); return v; });
发送到a
是一种更好的编程习惯。所以你要做这样的事情; (假设b
)
attr_reader :name
或者你可以让它成为设置的一部分;我不会给你所有的代码,但这是它的外观
class Upper
def test(s)
s.name
end
end
a = Test::Super.new('My Name')
u = Test::Upper.new
u.test(a)
这些示例都不是针对类的特别好的做法,但我想你有一个更具体的用例,你试图实现这个用于此问题的匿名用法:)
答案 1 :(得分:1)
如果出于某种原因,类Upper
的实例需要访问类Super
实例的内部,则意味着您存在设计缺陷。
一种可能的方法是Super
需要通过getter 公开变量:
module Test
class Super
def initialize(name)
@name = name
end
def name
@name
end
end
end
现在,您可以使用name
获取Test::Super.new("my name").name
。
另一种可能性是Upper
实际上是Super
的子类:
class Upper < Super
def test
puts @name
end
end
现在Test::Upper.new("my name").test
将打印"my name"
,因为Upper
从Super
派生实施。
此外,可以在封闭模块级别使用实例变量:
module Test
def self.name=(name)
@name = name
end
def self.name
@name
end
class Super
def initialize(name)
Test.name = name
end
end
class Upper
def test
puts Test.name
end
end
end
这将打印:
▶ Test::Super.new("my")
#⇒ #<Test::Super:0x0055dae57fe390>
▶ Test::Upper.new.test
#⇒ "my"
答案 2 :(得分:-1)
您可以在模块中使用类变量,Ruby本身支持它。
你可以这样做:
module Test
@@name = ''
class Super
def initialize(name)
@@name = name
end
end
class Upper
def test
puts @@name
end
end
end
a=Test::Super.new('My name')
b=Test::Upper.new()
b.test()