我有以下一点语法:
Void -> Void
//in context example
private var _onClickEvents : List < Void -> Void > ;
Run Code Online (Sandbox Code Playgroud)
这似乎被接受为类型定义,与Bool或相同TextField.我认为它与Haskell如何定义函数类型签名有类似的用途?
我正在使用Ruby on Rails v3.0.9,我想知道如果我声明一个常量值会发生什么(坏的):
MAX_LENGTH ||= 30
Run Code Online (Sandbox Code Playgroud)
顺便说一句:我正在开发一个"acts_as_something"插件(在我的应用程序中有多个类"acts_as_something"),我必须声明上面的常量值,以便在/.../log/apache2/error.log(生产模式)中不显示\生成"警告消息",如下所示:
warning: already initialized constant MAX_LENGTH
Run Code Online (Sandbox Code Playgroud) 我正在制作一些软件,通过我PC上的COM端口与某些电子设备进行串行通信.我必须与之前没有使用的SimplicTI协议进行通信.我找到了一个可以让我进行交流的库,但是由于我想成为一名程序员,我想了解这个库的每一个语句.在库的源代码中,我偶然发现了以下变量声明:
byte len = (data == null) ? (byte)0 : (byte)data.Length
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我似乎无法掌握这一说法.
顺便说一下,变量"data"是一个字节数组.
对于十六进制'88',我们可以声明这样的字节变量
Dim bytes = New Byte() { &H88 }
Run Code Online (Sandbox Code Playgroud)
我的情况,88被分配给变量hexvalue
如何用变量十六进制值声明字节?
Dim bytes = New Byte() { &H & hexvalue }
Run Code Online (Sandbox Code Playgroud)
以上抛出语法错误.
这似乎是正确的:
IList<IList<string>> MyList = new List<IList<string>>();
IList<string> List_Temp = new List<string>();
MyList .Add(List_Temp );
Run Code Online (Sandbox Code Playgroud)
这似乎不正确:
IList<List<string>> MyList = new List<List<string>>();
IList<string> List_Temp = new List<string>();
MyList .Add(List_Temp );
Run Code Online (Sandbox Code Playgroud)
为什么第二个不正确?
怎么会
int alone;
System.out.println(alone);
Run Code Online (Sandbox Code Playgroud)
给出错误但是
int[] arr = new int[1];
System.out.println(arr[0]);
Run Code Online (Sandbox Code Playgroud)
等于0?初始化一个空数组时,它会自动将其内容初始化为0(或null等)吗?
在你可能已经读过的K&R的C编程语言书中有一个标题相同的部分,"复杂的声明" .我正在阅读这本书并试图用C语言改进自己.在阅读了上面提到的部分之后,我想我无法理解C声明语句的语法背后的逻辑.1,2,3和4来自该部分5和6来自其他页面.
int (*daytab)[13]
daytab:指向int的数组[13]的指针
void (*comp)()
comp:函数返回void的指针
char (*(*x())[])()
x:函数返回指向函数返回char的指针array []的指针
char (*(*x[3])())[5]
x:指向函数的指针的数组[3]返回指向char的数组[5]的指针
typedef int (*PFI)(char *, char *)
创建类型PFI,用于指向返回int的函数(两个char*参数)的指针.语法如何在这里工作?
最后,我的问题是:
我正在尝试用C++创建一个类(我很长时间没有使用过类!)我试图用以下方式创建一些构造函数:
#ifndef TAAP_HEAD
#define TAAP_HEAD
class TaaP
{
public:
// default cosntructor
Taap();
// constructor with xyz
Taap(double xyz[3]);
private:
double m_xyz[3];
double m_Rho;
double m_GradRho[3];
double m_HessRho[3][3];
double m_EigenValues[3];
double m_EigenVectors[3][3];
};
#endif
Run Code Online (Sandbox Code Playgroud)
Taap()将简单地分配xyz给哪里{0.0, 0.0, 0.0},但Taap(double xyz[3])将允许用户输入他们自己的起始坐标.
我在编译时遇到的错误是:
hdr_taap.h:9:8: error: ISO C++ forbids declaration of ‘Taap’ with no type [-fpermissive]
Taap();
^
hdr_taap.h:12:21: error: ISO C++ forbids declaration of ‘Taap’ with no type [-fpermissive]
Taap(double xyz[3]);
^
Run Code Online (Sandbox Code Playgroud)
这有意义吗?我曾尝试过很多关于班级建设的例子,看不出我做错了什么.
我注意到C11不再允许您在循环结构中声明迭代器变量,例如,以下内容无效:
for (int i = 0; i < 10; ++i)
Run Code Online (Sandbox Code Playgroud)
但这没关系:
int i;
for (i = 0; i < 10; ++i)
Run Code Online (Sandbox Code Playgroud)
鉴于在C99之前甚至不可能在函数开头声明变量(块?C11是否允许函数中任何地方的变量声明?),我很好奇这与安全实践有什么关系.迭代器是应该在它们出现的函数或块的顶部声明,还是在它们被使用的第一个循环之上?我无法看到它在任何方面都有很大的不同,但前一种方法似乎对于移动代码更加健壮.就安全而言,我没有看到任何明显的影响.
另外,首先是C11上述变化的原因是什么?我更喜欢第一个例子中的语法.
编辑:对于我的上一个问题,我想一个问题是,如果多次使用迭代器,for (int i = 0; ...在一个块内移动就不会那么容易重构.
考虑以下代码:
for (int i = 0; i < 10; i++)
{
bool b; /* #1 */
if (i == 0)
{
b = true; /* #2 */
}
}
Run Code Online (Sandbox Code Playgroud)
我在#1和#2设置了断点.
在第一时间(I = 0),b设定为false在#1和在#2设置为真.
第二次(i = 1),b在#1处为真.
这对我来说没有意义,因为我假设当在第二个循环(i = 1)中开始时,b在声明时应该再次为假.
我假设在第二个循环中#1处的b = false.
有人在乎解释吗?