例子:
require "fluent/plugin/output"
module Fluent::Plugin
class Outer < Fluent::Plugin::Output
@outer_var = "Hello from outer variable"
class Inner
def initialize()
puts "@outer_var", @outer_var # nil
log.info "Hello from inner initialize" # undefined local variable or method log
outer_method() # undefined method `outer_method' for #<Outer::Inner:0x00007fd2100452b0> (NoMethodError)
end
end # Inner
def initialize()
Inner.new()
log.info "Hello from outer initialize" # works
end
def outer_method
puts "Hello from outer method"
end
end # Outer
end # Fluent::Plugin
如何使內部類可以訪問外部變數和方法?此處的示例顯示了如何定義內部/外部類,但不顯示如何訪問外部類。根據這個答案,我了解 Ruby 中不存在內部/外部類的概念。在仍然是模塊的一部分的同時使用Innerand類的最佳方式是什么。Outeroutput
uj5u.com熱心網友回復:
在 Ruby 中,內部類如何訪問外部類中定義的變數/方法?
Ruby 沒有“內部”或“外部”類的概念。聽起來您來自 BETA、Scala 或 Newspeak 之類的語言,但 Ruby 不是 BETA、Scala 或 Newspeak。作為一般規則,任何編程語言都完全按照編程語言規范所說的作業方式作業,而不是其他編程語言規范所說的作業方式。BETA、Scala 和Newspeak 有嵌套類,但Ruby 沒有。
在 Ruby 中,您可以在詞法上嵌套類定義,但這不會創建嵌套類。如果您將一個類的定義嵌套在另一個類的定義中,則不會在這兩個類之間創建任何型別的關系。沒有任何。您不能從另一個類“訪問一個類的變數/方法”,因為您可以遵循這兩個類之間沒有關系來獲取這些變數/方法。
嵌套類定義唯一要做的就是命名空間,將內部類定義定義的常量傳遞給外部類。而已。兩個類之間沒有關系,唯一的關系是常量和類之間。
這是不可能的。
在 Ruby 中創建類之間關系的方式是繼承,而不是嵌套(因為沒有嵌套)。在 Ruby 中創建物件之間關系的方法是關聯、聚合或組合,而不是嵌套。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495302.html
