相关疑难解决方法(0)

什么是Java和C#中的第一类对象?

多年前,当我开始编写OO编程时,我得到的印象是变量(如果这是正确的词)是"基元"(int,double等)或第一类对象(String,JPane等).最近关于Java和C#中的原语的回答进一步证实了这一点(@Daniel Pryden:Java和C#中的原始类型是不同的吗?).但是不知道C#ValueTypes是基元,对象还是其他一些野兽,比如二等对象.我看到SO只使用了一个first-class标签,所以它可能不再是一个有用的术语.

我没有发现维基百科的文章有用("这篇文章需要关于这个主题的专家的关注.").我要感谢分类和当前使用的术语,主要与Java和C#有关(尽管其他语言可能会有所启发).

澄清:我想理解一流的术语以及它的使用范围.

c# java first-class

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

由于函数是F#中的第一类值,为什么我不能将lambdas用作值?

如果我定义一个简单的函数:

let myConcat a b = 
    a + "+" + b
Run Code Online (Sandbox Code Playgroud)

然后假设函数是F#中的第一类值,我希望能够myConcat像这样使用:

let result = myConcat "a" (fun () -> "b")
Run Code Online (Sandbox Code Playgroud)

它没有产生字符串"a + b",而是给出了以下错误:

error FS0002: This function takes too many arguments, or is used in a context where a function is not expected
Run Code Online (Sandbox Code Playgroud)

希望我只是让语法错误,但在我看来,函数不能真正用作F#中的值.谁能解释一下这里发生了什么?

编辑 为了进一步澄清我的要求,我可以拥有等效的C#代码:

public string myConcat(string a, string b) { return a + "+" + b; }
Run Code Online (Sandbox Code Playgroud)

如果我想在param b中传递"稍后调用函数",我必须这样做:

public string myConcat(string a, Action<string> b) { return a + "+" + b(); }
Run Code Online (Sandbox Code Playgroud)

或者我可以这样称呼它: …

f#

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

在Javascript中,全局变量不会更改函数内的值

var a = 1;

function b() {
    function a() {}; // local scope
    a = 10; // global scope
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)

它警告1而不是10.我想知道为什么会这样?

javascript

0
推荐指数
1
解决办法
4100
查看次数

标签 统计

c# ×1

f# ×1

first-class ×1

java ×1

javascript ×1