我正在使用Mozilla Rhino JavaScript模拟器.它允许我将Java方法添加到上下文中,然后将它们称为JavaScript函数.但除非我使用静态方法,否则我无法工作.
问题是这部分文档:
如果方法不是静态的,那么Java'this'值将对应于JavaScript'this'值.任何使用不具有正确Java类型的'this'值调用该函数的尝试都将导致错误.
显然,我的Java"this"值与JavaScript中的值不对应,我不知道如何使它们对应.最后,我想在Java中创建一个实例,并在全局范围内安装几个方法,因此我可以从Java初始化实例,但在我的脚本中使用它.
有没有人有一些示例代码?
可能重复:
C#中变量名中@字符的用法/含义是什么?
我正在做一些.net开发,我注意到我可以在任何方法调用之前添加@符号,即:
var message = dog.@SayHello();
Run Code Online (Sandbox Code Playgroud)
只是想知道,为什么这可以做到?
天真的问题我相信,但我发现只是从构造函数中调用其他构造函数.我需要调用一个方法.我的班级(开始):
class ScopedIterator[T](val iter : Iterator[T])
{
private var had_next : Boolean;
private var value : T;
moveNext();
...
Run Code Online (Sandbox Code Playgroud)
所以我想有一个带有单个参数的构造函数,并在这样的构造函数中调用方法moveNext.就这样.
当我编译代码时,我得到错误:
错误:抽象成员可能没有私有修饰符
private var had_next:Boolean;
和价值相同.
我改成了:
class ScopedIterator[T]
{
private var had_next : Boolean;
private var value : T;
private var iter : Iterator[T];
def this(it : Iterator[T]) =
{
iter = it;
moveNext();
}
...
Run Code Online (Sandbox Code Playgroud)
但现在我得到"iter = it"的错误:
错误:'this'预期但找到了标识符.
iter = it;
如何在Scala中编写这样的构造函数?
我有这种情况,当从ImplementClass调用AbstractMethod方法时,我想强制调用AbstractClass中的MustBeCalled方法.我以前从未遇到过这种情况.谢谢!
public abstract class AbstractClass
{
public abstract void AbstractMethod();
public void MustBeCalled()
{
//this must be called when AbstractMethod is invoked
}
}
public class ImplementClass : AbstractClass
{
public override void AbstractMethod()
{
//when called, base.MustBeCalled() must be called.
//how can i enforce this?
}
}
Run Code Online (Sandbox Code Playgroud) java编译器(JDK1.6.0_21中的默认javac)是否会优化代码以防止使用相同的参数一遍又一遍地调用相同的方法?如果我写了这段代码:
public class FooBar {
public static void main(String[] args) {
foo(bar);
foo(bar);
foo(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
该方法foo(bar)只运行一次吗?如果是这样,有什么方法可以阻止这种优化吗?(我试图比较运行时的两个算法,一个迭代和一个比较,我想多次调用它们来获得一个代表性的样本)
任何见解都会非常感激; 我把这个问题带到了精神错乱的地步(虽然我的计算机在一段时间内非常快,所以我一直在添加方法调用,直到我得到code too large43671行的错误).
java compiler-construction optimization compiler-optimization method-call
我喜欢在带有参数的线程中调用该方法,并在此处返回一些值示例
class Program
{
static void Main()
{
Thread FirstThread = new Thread(new ThreadStart(Fun1));
Thread SecondThread = new Thread(new ThreadStart(Fun2));
FirstThread.Start();
SecondThread.Start();
}
public static void Fun1()
{
for (int i = 1; i <= 1000; i++)
{
Console.WriteLine("Fun1 writes:{0}", i);
}
}
public static void Fun2()
{
for (int i = 1000; i >= 6; i--)
{
Console.WriteLine("Fun2 writes:{0}", i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的例子运行成功,但如果方法fun1像这样
public int fun1(int i,int j)
{
int k;
k=i+j;
return k;
}
Run Code Online (Sandbox Code Playgroud)
那怎么能在线程中调用它?
我有一个C#windows窗体应用程序.我当前设置它的方式,当Form1_Load()运行时,它检查恢复的未保存数据,如果找到一些,它会提示用户是否要打开该数据.当程序运行时,它可以正常工作但是消息框会立即显示,并且主程序表单(Form1)在用户单击是或否之后才会显示.我想首先弹出Form1然后弹出消息框提示.
现在,在我在Form中创建一个计时器之前解决这个问题,在Form1_Load()方法中启动计时器,然后在第一个Timer Tick事件中执行检查和用户提示.这种技术解决了这个问题,但似乎可能有更好的方法.
你们有更好的想法吗?
编辑:我想我也使用后台工作人员做类似的事情.通过调用方法返回到表单线程所有麻烦似乎有点傻了,所有的垃圾只是让它延迟了几毫秒!
如果使用where T : BaseT == Derived中的新方法约束泛型类型参数(调用类或调用方法),则调用Base中的方法.
为什么在方法调用中忽略类型T,即使它应该在运行时之前知道?
更新:但是,当约束使用类似于where T : IBaseBase类中的方法的接口时(不是接口中的方法,这也是不可能的).
这意味着系统实际上能够检测远远超出类型约束的类型!那么为什么在类类型约束的情况下它不会超出类型约束?
这是否意味着实现接口的Base类中的方法具有方法的隐式override关键字?
测试代码:
public interface IBase
{
void Method();
}
public class Base : IBase
{
public void Method()
{
}
}
public class Derived : Base
{
public int i = 0;
public new void Method()
{
i++;
}
}
public class Generic<T>
where T : Base
{
public void CallMethod(T obj)
{
obj.Method(); //calls Base.Method()
}
public void CallMethod2<T2>(T2 obj)
where T2 …Run Code Online (Sandbox Code Playgroud) 我有一个MyClass写在文件中的python类MyClass.py:
class MyClass(object):
def __init__(self):
self.myvar = list()
def setvar(self, val):
self.myvar = val
def mymethod(self):
return self.myvar
Run Code Online (Sandbox Code Playgroud)
我在Robot Framework中导入如下:
Library MyClass WITH NAME my_component
Run Code Online (Sandbox Code Playgroud)
我还有一个关键字,它调用传递给它的对象方法:
testing component
[Arguments] ${cmp}
log to console ************* ${cmp}
${result} = ${cmp}.mymethod
Run Code Online (Sandbox Code Playgroud)
我有几个从类实例化的MyClass对象,每个对象都有不同的属性.testing component无论对象本身如何,我都希望使用关键字获取其属性.
当我打电话testing component传球my_component:
Test Method Call
testing component my_component
Run Code Online (Sandbox Code Playgroud)
我明白了:
No keyword with name '${cmp}.mymethod' found.
Run Code Online (Sandbox Code Playgroud)
如果我在关键字中这样调用它testing component:
${result} = call method ${cmp} mymethod
Run Code Online (Sandbox Code Playgroud)
我明白了:
Object 'my_component' …Run Code Online (Sandbox Code Playgroud) 来自Python文档中\xe2\x80\x98数据模型\xe2\x80\x99章节的\xe2\x80\x98新样式类的特殊方法查找\ xe2\x80\x99部分(粗体强调是我的):
\n\n对于新式类,只有在 object\xe2\x80\x99s 类型上定义特殊方法的隐式调用才能保证正确工作,而不是在 object\xe2\x80\x99s 实例字典中定义。这种行为就是以下代码引发异常的原因(与旧式类的等效示例不同):
\nRun Code Online (Sandbox Code Playgroud)\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此行为背后的基本原理在于由所有对象(包括类型对象)实现的许多特殊方法,例如
\n__hash__()和\n 。__repr__()如果这些方法的隐式查找\n使用传统的查找过程,则在类型对象本身上调用时它们将失败:Run Code Online (Sandbox Code Playgroud)\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错误地尝试以这种方式调用类的未绑定方法有时被称为 \xe2\x80\x98metaclass\nconfusion\xe2\x80\x99,并且可以通过在查找特殊方法时绕过实例来避免:
\nRun Code Online (Sandbox Code Playgroud)>>> type(1).__hash__(1) …
method-call ×10
c# ×5
.net ×2
inheritance ×2
java ×2
overriding ×2
python ×2
constructor ×1
form-load ×1
function ×1
generics ×1
javascript ×1
methods ×1
object ×1
optimization ×1
rhino ×1
scala ×1
winforms ×1