看看下面的代码:
var c = 50;
{
console.log(y);
let y = 50;
}
Run Code Online (Sandbox Code Playgroud)
这段代码应该引发一个ReferenceError,它确实会抛出.但是在控制台中,附带异常的消息只是让我大吃一惊.它说:
ReferenceError:在初始化之前无法访问词法声明'c'
在代码中c是声明的第一个变量.错误消息表明声明的内容有问题c.它显然是y块内的变量,导致异常.我们不能let在声明之前使用声明的变量.当我在第一行声明另一个变量时,例如test,错误消息更改为:
ReferenceError:在初始化之前无法访问词法声明'test'
我错过了什么或者我对这个错误是对的吗?我有最新的Firefox Developer Edition(版本49.0a2).
值得注意的另一件事是块只是一个封闭块,它不是函数体.
javascript firefox referenceerror console.log firefox-developer-edition
请考虑以下示例:
public class Learn {
public static <T> T test (T a, T b) {
System.out.println(a.getClass().getSimpleName());
System.out.println(b.getClass().getSimpleName());
b = a;
return a;
}
public static void main (String[] args) {
test("", new ArrayList<Integer>());
}
}
Run Code Online (Sandbox Code Playgroud)
在main方法中,我test用一个String和一个ArrayList <Integer>对象调用.这两个是不同的东西,并指派ArrayList至String(一般)给出编译错误.
String aString = new ArrayList <Integer> (); // won't compile
Run Code Online (Sandbox Code Playgroud)
但我在第3行正是这样做,test程序编译并运行正常.首先,我认为,类型参数T是由一个类型,是既兼容替代String和ArrayList(像Serializable).但是println里面的两个语句分别test打印出"String"和"ArrayList"作为类型a和b.我的问题是,如果a是 …
我对MySQLi非常熟悉,正在尝试PDO,我听说它更好.我正在阅读这里的教程.他们说当PDO :: ERRMODE_EXCEPTION设置时PDO抛出一个异常,我们不小心对查询做了一些错误(例如,输入错误,DELECT而不是SELECT).我键入了相同的错误查询,以查看本地环境中的错误和异常消息.我在我的32位Windows 7 PC中安装了PHP 5.5,MySQL 5.6和Apache 2.4.9的最新WAMP,但没有得到我所期望的,没有异常被抛出.我尝试了教程中发布的相同代码:
try {
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
# UH-OH! Typed DELECT instead of SELECT!
$DBH->prepare('DELECT name FROM people');
}
catch(PDOException $e) {
echo "I'm sorry, Dave. I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
Run Code Online (Sandbox Code Playgroud)
没有PDOError.txt,没有错误消息.教程或我的环境有问题吗?或者有些情况下PDO无法抛出异常?我为MySQL安装了PDO驱动程序.
这让我很困惑.我认为这两种方法没有任何区别.如果我var_dump()是这些方法返回的对象,它们完全相同,但Dayle Rees的书中说,pluck()返回给定列(第一个)中的单个值,而lists()方法返回给定列中的所有值.我甚至无法弄清楚为什么存在两种不同的方法来做同样的事情.
例
Route::get('getalbum', function() {
$data = \App\Album::pluck('artist');
var_dump($data); // a lot of text, let's call it 'object'
$data = \App\Album::lists('artist');
var_dump($data); // exact , exact, exact same 'object'
});
Run Code Online (Sandbox Code Playgroud) 计算机只能理解机器语言.那么,如果没有将其翻译成机器语言,解释器如何直接执行程序呢?例如:
<?php
echo "Hello, World!" ;
Run Code Online (Sandbox Code Playgroud)
这是一个用PHP编写的简单Hello World程序.它是如何在机器中执行的,而机器却不知道echo是什么?它是如何输出预期的,在这种情况下,字符串Hello,World!?
compiler-construction interpreter programming-languages dynamic-languages
考虑下面的示例:
template <typename T>
class SomeClass {
// rest of the definition ...
SomeClass<T>& function1() {
// ...
return *this;
}
SomeClass& function2() {
// ...
return *this;
}
}
Run Code Online (Sandbox Code Playgroud)
上面两个函数的返回值之间有区别吗?如果不是,应该选择哪一个?
我使用的是NetBeans IDE,在Java之前,我是一名C++程序员.从C++开始,我学到的是常量变量名应该只包含大写字母.我认为大多数编程语言都认为常量变量应该只包含带下划线的大写字母来分隔单词.
当我尝试static使用小写字母声明成员变量时,我的IDE NetBeans仅向我发出警告.如果变量是final,但是非静态的,这没关系.
final int mem1 = 90; // no warning
static final int mem2 = 90; // warning
Run Code Online (Sandbox Code Playgroud)
程序员不应该强制使用大写字母来命名任何类型的(静态,非静态)常量变量吗?
好的,我现在面对这个问题已经有很长一段时间了,仍然无法得到任何解决方案.我将描述正在发生的事情和我试图修复的事情.
一年前,我在Windows 7 32位(4GB内存,3.3GHz Intel内核i3 CPU)中安装了intellij Idea IDE.但它一直在崩溃,我永远无法启动它并建立一个新项目.尝试了数千次后我放弃了.
几个月前我安装了Android Studio,而工作室表现相同.它经常崩溃,甚至无法创建单个应用程序.有时我能够建立并运行一个项目,但无论如何它几乎不会超过7-10分钟.我想,工作室再次使用了ideJ的ide,这可能就是原因.也许intellij的想法太重了,无法在我的系统中运行.
一个月前我安装了NetBeans,现在虽然不像上面两个程序那样频繁,但它会随机崩溃.有时它会在加载启动画面时崩溃,或者在我打字或运行我创建的应用程序时崩溃.崩溃是完全随机的.
我尝试了以下方法来解决问题:
安装Windows 7 64位和Windows 10 64位假设可能存在一些操作系统问题(坏dll等).但这没有改变.
将Java使用的内存扩展到1024 MB(-Xms1024m)
试图在Linux发行版(Debian和Ubuntu)中运行Java应用程序,它们崩溃了.
卸载并重新安装Java 1.8大约100次.
更新图形驱动程序
让我烦恼的是,它不会在hs_err_pid日志文件中提供一致的错误报告.有时它说有问题的框架是一些java.util组件,有时它说它是jvm.dll本身.而且,有时根本不会生成hs_err_pid文件.
请告诉我在这种情况下该怎么做.这使我无法在Java中学习和构建.
注意:通过崩溃,我的意思是程序完全关闭.它们不会冻结或卡住.
谢谢!
编辑:错误日志文件
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000002823a26, pid=6768, tid=0x0000000000001578
#
# JRE version: Java(TM) SE Runtime Environment (8.0_131-b11) (build 1.8.0_131-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.131-b11 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# J 550 …Run Code Online (Sandbox Code Playgroud) 我正在从《Programming Ground Up》一书中学习x86汇编。在介绍函数时,作者给出了一个函数示例,该函数将给定的4字节整数提高为大于0的幂。这是函数的定义方式(这是我编写的版本,但是代码几乎相同):
1. .type find_pow, @function
2. find_pow:
3. pushl %ebp # Save current base pointer
4. movl %esp, %ebp # Copy stack pointer to base pointer
5. movl $1, %eax # %eax will hold the result, set it to 1
6.
7. subl $4, %esp
8. movl 8(%ebp), %ebx
10. movl 12(%ebp), %ecx
11.
12. movl %ebx, -4(%ebp)
13.
14. loop_find_pow: # Start loop
15. cmpl $1, %ecx # If 2nd parameter equals 0
16. je …Run Code Online (Sandbox Code Playgroud) 使得这两个函数对于无穷大和无穷大的行为有什么不同的原因.有没有人发现这种不一致有用?
parseInt(Infinity); // NaN
parseFloat(Infinity); // Infinity
Run Code Online (Sandbox Code Playgroud) 我最近试图在ideone.com中运行此代码...
#include <iostream>
#include <string>
using namespace std;
int getVal(string name)
{
if (name == "Devashish") return 0;
return 1;
}
int main()
{
cout << 5 / getVal("Devashish");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,这段代码没有抛出任何异常并在输出中打印5.有意编写代码以产生异常.以下是成功编译和执行错误代码的ideone链接:http://ideone.com/ogDzDU
当我尝试在Visual Studio上执行相同的代码时,我得到了一个异常(这是预期的).只是好奇.为什么ideone表现如此?它是编译器或其他程序中的错误吗?