给出以下代码:
string someString = null;
switch (someString)
{
case string s:
Console.WriteLine("string s");
break;
case var o:
Console.WriteLine("var o");
break;
default:
Console.WriteLine("default");
break;
}
Run Code Online (Sandbox Code Playgroud)
为什么switch语句匹配case var o
?
因为(有效地)评估为false case string s
,s == null
所以我的理解不匹配(null as string) != null
.VS Code上的IntelliSense告诉我这o
也是一个string
.有什么想法吗?
类似于:C#7切换案例,带有空检查
也许很简单的问题.
我应该var
在JavaScript中使用关键字.在我看来使用它或不具有相同的效果(但我当然还在学习语言)
比如这些对我来说似乎都是一样的:
(function(){
var a = "mundo"
alert("Hola, " + a )
})()
Run Code Online (Sandbox Code Playgroud)
和
(function(){
a = "mundo"
alert("Hola, " + a )
})()
Run Code Online (Sandbox Code Playgroud)
但当然必须有一个更复杂的例子,差异显示出来.
我想对Swift中的一些属性使用Lazy初始化.我当前的代码如下所示:
lazy var fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()
Run Code Online (Sandbox Code Playgroud)
问题是,一旦设置了fontSize,它将永远不会改变.所以我想做这样的事情:
lazy let fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()
Run Code Online (Sandbox Code Playgroud)
这是不可能的.
只有这个有效:
let fontSize : CGFloat = {
if (someCase) {
return CGFloat(30)
} else {
return CGFloat(17)
}
}()
Run Code Online (Sandbox Code Playgroud)
所以 - 我想要一个延迟加载但永远不会改变的属性.这样做的正确方法是什么?使用let
和忘记懒惰的初始化?或者我应该使用lazy var
并忘记属性的恒定性质?
此代码记录6
6次:
(function timer() {
for (var i=0; i<=5; i++) {
setTimeout(function clog() {console.log(i)}, i*1000);
}
})();
Run Code Online (Sandbox Code Playgroud)
但是这段代码......
(function timer() {
for (let i=0; i<=5; i++) {
setTimeout(function clog() {console.log(i)}, i*1000);
}
})();
Run Code Online (Sandbox Code Playgroud)
...记录以下结果:
0
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
为什么?
是因为不同地let
绑定到内部范围每个项目并var
保持最新值i
?
func main(){
var array [10]int
sliceA := array[0:5]
append(sliceA, 4)
fmt.Println(sliceA)
}
Run Code Online (Sandbox Code Playgroud)
错误:附加(sliceA,4)已评估但未使用
我不知道为什么?切片追加操作未运行...
我开始学习PHP/MySQL,但是在我正在阅读的所有文档中,它都提到/var/www/html
了要安装CakePHP等框架的文件夹,或者例如/ var/www/html是你想要的文件夹安装你的网站,以便一切都在root中.
究竟是什么/var/www/html
意思?
对于Java 10或+,我们可以使用var
关键字进行声明。在初始化时,编译器将推断类型。
当我实例化的类并分配给用 , 声明的变量var
,是接口的实现时,会发生什么?将推断哪种类型,接口还是实现?