标签: method-call

为什么我们在隐式查找特殊方法时绕过实例属性?

来自Python文档中\xe2\x80\x98数据模型\xe2\x80\x99章节的\xe2\x80\x98新样式类的特殊方法查找\ xe2\x80\x99部分(粗体强调是我的):

\n
\n

对于新式类,只有在 object\xe2\x80\x99s 类型上定义特殊方法的隐式调用才能保证正确工作,而不是在 object\xe2\x80\x99s 实例字典中定义。这种行为就是以下代码引发异常的原因(与旧式类的等效示例不同):

\n
>>> class C(object):\n...     pass\n...\n>>> c = C()\n>>> c.__len__ = lambda: 5\n>>> len(c)\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nTypeError: object of type \'C\' has no len()\n
Run Code Online (Sandbox Code Playgroud)\n

此行为背后的基本原理在于由所有对象(包括类型对象)实现的许多特殊方法,例如__hash__()和\n 。__repr__()如果这些方法的隐式查找\n使用传统的查找过程,则在类型对象本身上调用时它们将失败:

\n
>>> 1 .__hash__() == hash(1)\nTrue\n>>> int.__hash__() == hash(int)\nTraceback (most recent call last):\n  File "<stdin>", line 1, in <module>\nTypeError: descriptor \xe2\x80\x99__hash__\xe2\x80\x99 of \xe2\x80\x99int\xe2\x80\x99 object needs an argument\n
Run Code Online (Sandbox Code Playgroud)\n

错误地尝试以这种方式调用类的未绑定方法有时被称为 \xe2\x80\x98metaclass\nconfusion\xe2\x80\x99,并且可以通过在查找特殊方法时绕过实例来避免:

\n
>>> type(1).__hash__(1) …
Run Code Online (Sandbox Code Playgroud)

python methods function method-call

5
推荐指数
1
解决办法
731
查看次数

如何在ReactJS中调用同一个类中的方法?

我想在同一个类中调用该方法.例如,当我单击一个按钮时,它将触发该方法handleLoginBtnClicked().我希望它会checkInputValidation()在同一个类中调用该方法.这样做的正确方法是什么?

export default class LoginCard extends React.Component {

    //If I click a button, this method will be called.
    handleLoginBtnClicked() {
        this.checkInputValidation();
    }

    checkInputValidation() {
        alert("clicked");
    }
    ...
    ...
    ...
    render() {
        ...
        <LoginBtn onClick={this.handleLoginBtnClicked}/>
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

Uncaught TypeError: this.checkInputValidation is not a function
Run Code Online (Sandbox Code Playgroud)

javascript method-call reactjs

5
推荐指数
1
解决办法
6949
查看次数

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

Java调用方法并使用三元运算符并在参数中赋值?

我正在审查一些代码,我发现了这个:

 public static doSomething(String myString, String myString2) {
        //Stuff
 }

 public static doAnotherThing(String myString) {
      return doSomething(myString = myString != null ? myString.toLowerCase(): myString, null)
 }
Run Code Online (Sandbox Code Playgroud)

这是如何工作的?我知道.toLowerCase结果字符串被分配给myString(是的我知道不好的做法,因为你不应该重新分配方法参数,事实上它们应该是最终的),但是我不太确定方法总是接收它需要的2个参数.

当myString为null或者至少我认为我这样做时,我知道它是如何工作的,因为三元有myString,null,但我不太清楚为什么当myString不为null时它会去那里?

java variable-assignment ternary method-call

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

Java将方法返回值称为切换案例值

我必须使用一个值,通常通过switch case中的方法返回.

int getVal(){return 121;}

 switch(expr){

    case getVal():
 }
Run Code Online (Sandbox Code Playgroud)

但它给出了编译错误:需要持续表达.

我也试过,

int _val = getVal();

 switch(expr){

    case _val:
 }
Run Code Online (Sandbox Code Playgroud)

有相同的结果.

是否有任何解决方法来实现它.

谢谢,阿米特

java case switch-statement method-call

4
推荐指数
1
解决办法
2670
查看次数

Java:在 main() 方法中调用静态方法

我应该做以下事情:

使用名为 generateEmployees() 的静态方法编写 Java 应用程序(客户端)程序,该方法返回 10 个不同类型的 Employee 对象的随机列表。您可以使用数组或 ArrayList 来存储将返回的员工对象。使用 for 循环用一些随机数据随机填充不同类型的员工对象。您可能会想到 1 – 4 之类的值范围。如果随机值为 1,则创建一个带有一些随机生成数据的 HourlyEmployee 对象,如果是 2,则创建带有一些随机数据的 SalariedEmployee 对象等等。我会把它留给你的聪明才智来生成和填充这些不同的 Employee 对象。在生成这些对象时,将它们添加到您的数据结构(您正在使用的数组或 ArrayList)中。最后,该方法返回此数据结构。

在同一个应用程序类中,实现 main() 方法。调用 generateEmployees( ) 静态方法并使用 for 循环在终端窗口上打印每个员工的详细信息以及他们的收入。

我的 generateEmployees() 静态方法如下(它可能不正确......此外,数据不是随机生成的,因为我不确定如何做到这一点,至少就名字和姓氏而言关心。):

public static Employee[] generateEmployees()
{
    Employee[] employees = new Employee[10];
    int randomNum = 0;
    
    for (int i = 0; i < 10; i++)
    {
        Random random = new Random();
        randomNum = random.nextInt(4) + 1;
         
         switch (randomNum)
         {
            case 0:
                employees[i] = new …
Run Code Online (Sandbox Code Playgroud)

java static-methods program-entry-point method-call

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

如何在JSTL中调​​用java方法?

这可能是重复的问题。

我只想调用不是 getter 或 setter 方法的方法,例如。makeCall(someObj,"stringvalue") 的 xyz 类。

Java类

Class XYZ{

    public String makeCall(Object objValue, String stringValue){

    //some logic here

    }
}
Run Code Online (Sandbox Code Playgroud)

JSTL

<jsp:userBean id="xyz" class="com.XYZ"/>
${xyz.makeCall("hello","Friend")}
Run Code Online (Sandbox Code Playgroud)

java jstl method-call

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

我一直得到错误"不匹配调用'(std :: vector <int>)(int)"

在阅读此问题之前请注意,这是hp代码战争(编程竞赛)的实践问题,我不是在问论坛有关真正的问题.我的程序应该采取以下输入:

  • 一个数字,代表一个罐子里的糖果数量
  • 用户将要输入的猜测数量
  • 一个人的名字,然后是一个空格,然后是他们的猜测

例:

  • 422:罐子里的糖果量
  • 2:猜测数量
  • Joe 324:猜测者的名字和他们猜测罐子里有多少糖果
  • 玛丽435:第二个猜测和猜测

输出应该是具有最接近猜测的人的姓名

例:

  • 玛丽

我目前正在编写函数,返回最接近猜测的数字.但是当我运行代码时,它会no match for call '(std::vector<int>) (int)在两行上给出错误.发送错误的行在我的代码中的注释中指出.

这是我的代码:

vector<int> compare(vector<int> nums, int loopnum, int ans){
  vector<int> buff2;
  for (int i = 0; i<loopnum;i++){
      vector<int>diff;
      int buff = ans - nums.at(i);
      for (int j = 0; j<loopnum; j++){
         diff.push_back(buff);
         for (int k = 0; k<diff.size(); k++){
             if (k == 0){
                buff2.push_back(diff.at(k));
             }
             else{
                 // this line is sending back an error
                 if ((abs(buff2(0))) > abs(diff.at(k))) …
Run Code Online (Sandbox Code Playgroud)

c++ vector no-match method-call c++11

3
推荐指数
1
解决办法
2869
查看次数

Android,来自单独类的访问片段方法

我有一个片段

public class CustomFrag extends Fragment{
    ...
    public void refreshList(){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个单独的

public class SomeClass{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试refreshList()SomeClass以下位置致电:

String tagName = "android:switcher:" + R.id.pager + ":" + 1;
CustomFrag f2 = (CustomFrag)getActivity().getSupportFragmentManager().findFragmentByTag(tagName);
f2.refreshList();
Run Code Online (Sandbox Code Playgroud)

但这说明Cannot resolve method 'getActivity'。如果我添加到类:

extends Fragment
Run Code Online (Sandbox Code Playgroud)

所有警告都消失了,但应用程序崩溃,该CustomFrag f2 = (CustomFrag)...行出现空指针异常。

我有另一个片段,包含在与 相同的父级中CustomFrag,并且上述方法调用效果很好。

我怎样才能访问这些CustomFrag方法SomeClass?这个问题(和类似问题)被问遍了,但大多数都没有接受答案,或者有非常模糊的没有帮助的答案。

提前致谢。

编辑:临时解决方案

我正在调用属于SomeClass上述两个片段中的方法。我想出的是以下内容:

之内 FragOne

public class FragOne extends Fragment{

    ...

    String …
Run Code Online (Sandbox Code Playgroud)

java android method-call android-fragments

3
推荐指数
1
解决办法
6249
查看次数

在Perl中调用没有self参数的方法

我想知道是否可以在不传递self参数的情况下从对象调用方法.

举个例子,我有一个包:

package MyPackage;

sub new {
    my $class = shift;
    return bless {}, $class;
}

sub test {
    print("called(" . join(', ', @_) . ")\n");
}
Run Code Online (Sandbox Code Playgroud)

从脚本中,我调用构造函数,然后调用test方法:

my $obj = MyPackage->new();
$obj->test("str");
Run Code Online (Sandbox Code Playgroud)

给我以下输出:

called(MyPackage=HASH(0x55b05d481f48), str)
Run Code Online (Sandbox Code Playgroud)

是否有任何方法(即使它不是最佳实践或使用该语言的某些"神秘"功能)test仅使用引用调用该方法 $obj而不隐式传递"self"参数.

总之,是否有可能做到这样的事情:

$objXXXXtest("str");
Run Code Online (Sandbox Code Playgroud)

XXXX假设的结构得到called(str)输出?

oop perl method-call

3
推荐指数
1
解决办法
164
查看次数