标签: private-methods

Ruby私有方法是否可以在子类中访问?

我的代码如下:

class A
  private
  def p_method
    puts "I'm a private method from A"
  end
end

class B < A
  def some_method
    p_method
  end
end

b = B.new
b.p_method    # => Error: Private method can not be called
b.some_method # => I'm a private method from A
Run Code Online (Sandbox Code Playgroud)

b.some_method调用在类中定义的私有方法A.如何在继承它的类中访问私有方法?在所有面向对象的编程语言中,这种行为是否相同?Ruby如何封装?

ruby private-methods

10
推荐指数
1
解决办法
5329
查看次数

在C#中命名私有和静态私有方法的最佳实践是什么?

我试图弄清楚在C#中命名私有方法和私有静态方法的最聪明方法是什么.

背景:我知道私有成员的最佳做法是下划线前缀+ camelcase.你可以跟我争论这个,但相信我,我已经看到了遵循这个惯例的核心专业人士的足够代码,这是熟练的行业标准.

我也知道pascal案例是公共方法的行业标准.但我已经看到测试样式命名(即method_must_return_false_occasionally)与pascal case,camelcase和underscore-prefix + camelcase的组合,用于私有和私有静态方法.

但是,在C#中私有和私有静态方法命名的最佳实践风格是什么?

如果某些私有方法使用某些样式而不是其他方法,我可以理解,只需解释一下.

谢谢阅读.

c# naming-conventions private-methods

9
推荐指数
2
解决办法
1万
查看次数

在Javascript中访问内部函数变量

例如,在许多框架中,内部函数变量用作私有变量

Raphael = (function(){
    var _private = function(a,b) {return a+b;};
    var _public = function(a) {return _private(a,a);}
    var object = {mult2:_public};
    return object;
})();
Run Code Online (Sandbox Code Playgroud)

在这里,我们无法从全局命名空间中访问名为的变量private,因为它是第一行中匿名函数的内部变量.

有时这个函数包含一个大的Javascript框架,因此它不会污染全局命名空间.

我需要在Raphael内部单元测试一些对象用法(在上面的例子中,我希望对对象运行单元测试private).我该如何测试它们?

编辑:我收到了关于应该测试公共接口的单元测试的评论.

我来指一个用例.我正在写一个名为的库Raphael.该库应该只向全局命名空间添加一个名称,仅此而已.这是Javascript的特殊要求,因为Javascript没有名称空间.

假设Raphael使用链表.如果Javascript有包的概念,我会这样做

require 'linked_list'
Raphael = (function(){/* use linked list */})();
Run Code Online (Sandbox Code Playgroud)

但是,Javascript不允许我以任何不会使用链表对象污染全局范围的方式执行此操作!因此,我必须内联linked_list到Raphael的本地范围:

Raphael = (function(){
    /* implement linked list */
    var linked_list = function(){/*implementation*/};
})();
Run Code Online (Sandbox Code Playgroud)

现在我想测试linked_list实现.

javascript unit-testing private-methods

9
推荐指数
2
解决办法
3394
查看次数

objective-c私有与公共方法和标题中的声明是否?

Objective-c中私有方法的最佳实践方法是什么?这是一种仅用于将类作为辅助方法的方法.

特别是我不清楚的是:

  1. 是否需要将头文件中指定的方法设为私有?即为什么不把它从头文件中删除,并且
  2. 如果你可以将它从头文件中删除,那么拥有私有方法有什么意义呢?
  3. 或者在objective-c中的情况是没有真正的私有方法这样的东西,在这种情况下,最好只指定头文件中的所有内容并且根本没有标记私有的麻烦?

谢谢

iphone methods objective-c private-methods

9
推荐指数
2
解决办法
8124
查看次数

C私有变量获取和设置方法

我在C中工作,并且有一些我不想成为全局的变量,但我确实想要获取和设置它们的方法,可以在文件外部访问"Globaly".我习惯在Java中这样做,但C以这种方式非常不同.基本上我正在寻找遵循这个伪代码的东西,但我无法找到任何可以看到的示例.

main.c
#include data.h
set(b);

datalog.c
#include data.h
get(b);

data.c
private int c;
set(b){
    c = b;
}
get(c){
    return c;
}
Run Code Online (Sandbox Code Playgroud)

c private-members private-methods

9
推荐指数
2
解决办法
3万
查看次数

如何在面向对象的Perl中定义私有或内部方法?

我正在使用Damian Conway的"由内而外"的对象,如他所描述的那本精彩的书Perl Best Practices,用于在我的客户端构建面向对象的安全系统接口.我想在我的模块中使用内部帮助器方法,我通常将其指定为"_some_method".但是,这似乎打破了封装,因为它们可以通过包名直接调用.有没有办法让这些方法真正私密?举个例子,

use SOD::MyOOInterface;

my $instance1 = SOD::MyOOInterface->new();
$instance1->_some_method;  #this produces an error: 
SOD::MyOOInterface::_some_method;   # this results in a 
                                    # successful method call 
Run Code Online (Sandbox Code Playgroud)

显然我不希望_some_method的直接调用成功.有什么方法可以保证吗?

oop perl private-methods

8
推荐指数
3
解决办法
4298
查看次数

Objective-C:我应该声明私有方法吗?

根据在Objective-C中为类定义私有方法的最佳方法,我一直在类扩展中声明私有方法.

但是,我刚刚意识到,在Xcode 4中,如果我完全忽略私有方法的声明并且只是实现它,那么应用程序将编译并运行而不会发出警告或错误.

那么,我是否应该在类扩展中声明私有方法呢?

为什么我们必须要声明方法呢?在Java中,你没有......在Ruby中也没有.

objective-c private-methods categories class-extensions

8
推荐指数
2
解决办法
4030
查看次数

Ruby module_function,调用模块的私有方法,在模块的类方法样式中调用显示错误

test_module.rb

  module MyModule
    def module_func_a
      puts "module_func_a invoked"
      private_b
    end

    module_function :module_func_a

    private
    def private_b
      puts "private_b invoked"
    end
  end

  class MyClass
    include MyModule
    def test_module
      module_func_a
    end
  end
Run Code Online (Sandbox Code Playgroud)

从类调用模块函数

  c = MyClass.new
  c.test_module
Run Code Online (Sandbox Code Playgroud)

输出1:

$ ruby test_module.rb 
 module_func_a invoked
 private_b invoked
Run Code Online (Sandbox Code Playgroud)

在类方法样式中调用模块上的模块函数

ma = MyModule.module_func_a
Run Code Online (Sandbox Code Playgroud)

输出2:

 module_func_a invoked
 test_module.rb:5:in `module_func_a': undefined local variable or method `private_b' for MyModule:Module (NameError)
 from test_module.rb:31
Run Code Online (Sandbox Code Playgroud)

从输出1和输出2中可以看出,当将模块包含在类中时,当从模块函数调用模块的私有方法时,如果在类方法样式中直接调用模块上的模块函数,则不会出现问题找不到模块函数调用的模块私有方法.

任何人都可以让我理解上面行为背后的原因,是否可以在类方法样式中调用模块函数(进而调用模块的私有方法)?如果可能的话,我的代码中需要做哪些修正才能做同样的事情?

ruby module private-methods

8
推荐指数
1
解决办法
4354
查看次数

Kotlin中如何从类外部调用类的私有函数

我想SomeClass从该类的外部调用该类的私有函数:

class SomeClass {
    private fun somePrivateFunction() {
        //...
    }

    private fun somePrivateFunctionWithParams(text: String) {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

在代码中的某个地方我引用了SomeClass对象:

val someClass = SomeClass()
// how can I call the private function `somePrivateFunction()` from here?
// how can I call the private function `somePrivateFunctionWithParams("some text")` from? here
Run Code Online (Sandbox Code Playgroud)

如何从类外部调用 Kotlin 中带参数和不带参数的私有函数?

reflection private private-functions private-methods kotlin

8
推荐指数
2
解决办法
2万
查看次数

如何使用私有方法为 ES6 类正确配置 eslint?

我正在 vue 项目中编写带有私有属性/方法的 ES6 类。并使用 eslint 对代码进行 lint。下面是示例类:

class TestClass {
  constructor(value) {
    this.#privateProperty = value
    this.#privateMethod(this.#privateProperty)
  }

  #privateProperty = undefined

  // lint error raised at below line
  #privateMethod(value) {
    this.e = value
    console.log(this.e)
  }
}
Run Code Online (Sandbox Code Playgroud)

vue 项目由@vue/cli 4.1.2 创建。以下是有关该项目的一些配置:

babel.config.js:

module.exports = {
  presets: ['@vue/cli-plugin-babel/preset'],
  plugins: [
    ['@babel/plugin-proposal-class-properties', { loose: true }],
    ['@babel/plugin-proposal-private-methods', { loose: true }]
  ]
}
Run Code Online (Sandbox Code Playgroud)

包.json:

{
  "name": "demo-project",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "test:unit": "vue-cli-service test:unit",
    "lint": …
Run Code Online (Sandbox Code Playgroud)

javascript private-methods eslint es6-class

8
推荐指数
2
解决办法
3712
查看次数