我是C#的新手,字面上是第50页,我很好奇如何在一行代码中编写这些变量:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace consoleHelloWorld
{
class Program
{
static void Main(string[] args)
{
int mon = DateTime.Today.Month;
int da = DateTime.Today.Day;
int yer = DateTime.Today.Year;
var time = DateTime.Now;
Console.Write(mon);
Console.Write("." + da);
Console.WriteLine("." + yer);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我来自JavaScript,在哪里这样做,它看起来像这样:
document.write(mon+'.'+da+'.'+yer);
Run Code Online (Sandbox Code Playgroud)
任何帮助在这里表示赞赏.
例:
function Foo() {
this.bla = 1;
var blabla = 10;
blablabla = 100;
this.getBlabla = function () {
return blabla; // exposes blabla outside
}
}
foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
原始问题:
我知道bla将分配给Foo的每个实例.会发生什么blabla?
新问题:
我现在明白了:
this.bla = 1; // will become an attribute of every instance of FOO.
var blabla = 10; // will become a local variable of Foo(**not** an attribute of every instance of FOO), which could be accessed by any instance of FOO …Run Code Online (Sandbox Code Playgroud) 我知道Scala有var(对于可变状态)但是纯函数式编程不鼓励使用任何可变状态,而是专注于使用val所有东西.
来自一个势在必行的世界,很难放弃可变的状态.
我的问题是什么时候可以在你的Scala代码中使用var?所有代码都可以使用val完成.如果是,那么为什么Scala有变量呢?
在过去的几个月里,我一直在学习很多关于JavaScript的知识.多年来一直滥用语言,我敢说我现在对语言有了更好的理解,并且我开始喜欢它的功能性.
最近我接受了学习计划,但这只是为了好玩.浏览MDN引用我注意到JS虽然缺少块作用域,但确实有一个关键字可用于声明给定块的本地变量,就像Scheme的一样let:
for (var i=0;i<someArray.length;i++)
{
console.log(someArray[i]);
}
console.log(i);//will log someArray's length
Run Code Online (Sandbox Code Playgroud)
鉴于:
for (let i=0;i<someArray.length;i++)
{
console.log(someArray[i]);
}
console.log(i);//undefined
Run Code Online (Sandbox Code Playgroud)
所以我现在想知道的是:为什么不let经常使用?它与X浏览器支持有关吗?它只是那些鲜为人知的好东西之一吗?
简而言之,使用var过有let什么好处,有什么警告?
据我所知,行为let是,如果有的话,更一致(单个块中的双重声明引发一个TypeError,除了函数体(ECMA6草稿修复了这个).
说实话,除了这个功能/关键字我不是很了解,我很难想到任何反对使用letfor循环的论据,或者临时变量使代码更易读的地方.
非常明确支持在C#中使用'var'关键字.例如,而不是......
ThisIsMyReallyLongFooClassName foo = new ThisIsMyReallyLongFooClassName();
Run Code Online (Sandbox Code Playgroud)
我可以输入这个......
var foo = new ThisIsMyReallyLongFooClassName();
Run Code Online (Sandbox Code Playgroud)
...而且我还有一个强类型的变量.出于所有意图和目的,这两者是平等的.后者只是更具可读性(同样,因为它很明显.有些情况下它不是,'var'不应该被使用.但是我不希望这成为对它的讨论.)
我想知道Objective-C是否有类似的东西.
可能重复:
在方法之外使用var
class A {
string X;
}
// Proper
class A {
var X;
}
// Improper (gives error)
Run Code Online (Sandbox Code Playgroud)
为什么,我不能在类中使用var类型变量声明,为了实现它可以做些什么或者什么是替代?
在函数/方法中,我可以声明一个var类型变量,那么为什么不能,我在课堂上这样做?
谢谢.
可能重复:
var关键字有什么意义?
我不是在问它是如何运作的.我不是在问它是否会影响性能.我已经知道那些答案了.
我想知道MS C#团队首先将它添加到语言中的原因.你不会在语言中加入无聊的东西.一定有一个值得注意的问题.这是什么问题?
我见过的"它解决的问题"最接近的例子是使用匿名类型时,如下所示:
var linqResult = from element in SomeCollection s
elect new { element.A, element.B }
Run Code Online (Sandbox Code Playgroud)
具有讽刺意味的是,样式和编码标准指南(例如Microsoft提供的)建议编码人员避免在结果类型不明显时使用'var'.换句话说,'var'的(推测)预期目的与编码标准指南相冲突.
如果我正在编写编码标准,并试图防止过度使用'var',我有点倾向于说"仅使用'var'来回应匿名类型." 但这带来了问题的全方位:将"var"添加到语言中的目的是什么?
在查看其他人的Clojure代码时,我偶尔会看到一个定义的函数defn,然后使用var-quote语法调用,例如:
user> (defn a [] 1)
#'user/a
user> (a) ; This is how you normally call a function
1
user> (#'a) ; This uses the var-quote syntax and produces the same result
1
Run Code Online (Sandbox Code Playgroud)
对于我的生活,我无法弄清楚这两种调用函数的方式之间的区别.我在评估文档中找不到任何内容来说明当调用的操作符是var时会发生什么,这可能表明为什么第二种形式是首选的.他们似乎都对binding作业和语法引用作出了相同的回应.
那么,能不能请人提供一个代码示例,将说明之间的区别(a)和(#'a)上面?
编辑:我知道var-quote可以用于获取被let词法绑定所遮蔽的var ,但在我正在查看的代码中似乎并非如此.
我想给一个变量赋值为null的初始值,并在接下来的分配其价值if- else块,但编译器给了一个错误,
必须初始化隐式类型的局部变量.
我怎么能实现这个目标?
我一般对Java-11感到好奇,但特别是JEP:323计划将var声明添加到Lambda操作变量.
这个功能背后的动机在这里很好地讨论.请考虑以下文章中的引用:
// #1 - Legal
ITest divide = (@ATest var x, final var y) -> x / y;
/* #2 Modifiers on Old-Style implicit paramaters => Illegal */
ITest divide = (@ATest x, final y) -> x / y;
Run Code Online (Sandbox Code Playgroud)
最终修饰符的使用对我来说很清楚,并且符合不变性最佳实践.
但是,我不确定注释.能够注释lambda隐式参数有什么好处?
你能提供一个在lambda操作变量上使用注释的事实上的有益例子吗?这不是一个意见问题,而是作为使用此功能时更具可读性或效率的代码的实际示例.
var ×10
c# ×4
javascript ×2
.net ×1
annotations ×1
class ×1
clojure ×1
coding-style ×1
console ×1
constructor ×1
eval ×1
int ×1
java ×1
java-11 ×1
lambda ×1
let ×1
linq ×1
mutable ×1
objective-c ×1
scala ×1
scope ×1