R6: рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдХреЗ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдлрд╝рд░ре░ 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: r-lib/R6

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдирд╛ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкрд╕рдВрдж рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВрдиреЗ super$private$foo() рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдУрдУрдкреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИ рдХрд┐ рдЙрдк-рд╡рд░реНрдЧ рдЕрдкрдиреЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ (рдПрд╕) рдХреЗ рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд╛рдХрдИ рдпрд╣ рдЗрддрдиреА рдмреБрд░реА рдмрд╛рдд рд╣реЛрдЧреА? рдЖрдЦрд┐рд░рдХрд╛рд░, рд╡рд┐рд░рд╛рд╕рдд рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд▓реЛрдЧреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП "рдЦреЛ" / рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рдирд╣реАрдВ рд╣реИ (рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдирд┐рдЬреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ _again_ рдХреЛ рдирд┐рдЬреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдкрд╡рд░реНрдЧ)?

рд╕рд┐рд░реНрдл рдореИрдВ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдиреЗ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рд╕реЗ рдЙрдк-рд╡рд░реНрдЧ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреБрдЫ "рдЖрдВрддрд░рд┐рдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдХреЗрд╡рд▓ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реБрд▓рдн)ред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ A , bar() рдореЗрдВ рдПрдХ рд╢реБрджреНрдз рдЖрдВрддрд░рд┐рдХ рдЪрд░рд┐рддреНрд░ рд╣реИ рдФрд░ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреА рд╡реИрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдпрд╣ B рд▓рд┐рдП рд╕реБрд▓рдн рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореБрдЭреЗ B рдореЗрдВ рдареАрдХ рдЙрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

require("R6")
A <- R6Class(
  classname = "A",
  public = list(
    foo = function() {
      "foo"
    }
  ),
  private = list(
    bar = function() {
      "bar"
    }
  )
)

B <- R6Class(
  classname = "B",
  inherit = A,
  public = list(
    foobar = function() {
      print(super$foo())
      print(super$private$bar())
    }
  )
)

x <- B$new()
x$foobar()

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

super , рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рджреЛрдиреЛрдВ рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рддреЛ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдмрд╕ super$bar() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

super , рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рджреЛрдиреЛрдВ рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рддреЛ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдмрд╕ super$bar() рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд╣! рдЙрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдмрдврд╝рд┐рдпрд╛, рдЦреБрд╢реА рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gaborcsardi picture gaborcsardi  ┬╖  22рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mb706 picture mb706  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

paulstaab picture paulstaab  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattwarkentin picture mattwarkentin  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kenarab picture kenarab  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ