告诉我,有什么俄语的C#10(.Net 6)或C# 9(.Net 5)的书,适合语言相对初学者(搞清楚),但有其他语言的经验(爪哇)。在其他 .Net Framework 中阅读旧书是否有意义?
从后者我发现:C# 9 编程语言和.NET 5 平台。基本原理和编程实践。第 10 版
对此有何看法?
有一个 player.h 文件:
#ifndef PLAYER_H
#define PLAYER_H
/*-------------Libraries-------------*/
#include <SDL2/SDL.h>
#include <stdlib.h>
#include "map.h"
#include "view.h"
/*-------------Libraries-------------*/
/*---------Typedef---------*/
typedef struct Player
{
double x;
double y;
SDL_Texture *texture;
} Player;
/*---------Typedef---------*/
/*--------Func-Prototypes--------*/
void init_player
(
Player *player, Game_Map *game_map,
char path[], SDL_Renderer *renderer
);
/*--------Func-Prototypes--------*/
#endif
我这样编译:
#!/bin/bash
gcc -Wall -o roguelite map.c view.c player.c main.c -lSDL2
引发错误:
In file included from view.h:9,
from map.h:10,
from map.c:1:
player.h:24:21: error: unknown type name ‘Game_Map’
24 | Player *player, Game_Map *game_map,
|
由于某种原因,它在 player.h 中看不到 Game_Map 类型,尽管函数原型前有 #include "map.h"
地图.h:
...
typedef struct
{
int max_x;
int max_y;
char grid[ MAX_Y ][ MAX_X ];
SDL_Texture *floor_texture;
SDL_Texture *wall_texture;
} Game_Map;
...
...是另一个代码。
如果错误在于我如何使用#include,请使用项目链接到 github 以获取完整图片: https ://github.com/Ilya-Piskurov/SDL_Roguelite/tree/develop
框架窗口管理器是否放置在桌面环境之上?也就是说,我们有条件地安装了 Linux——我们放了 gnome——我们放了 i3。或者框架窗口管理器是桌面环境的替代品,我们只安装 Linux - i3?
我还不能理解窗口管理器和桌面环境之间的区别。环境是一个更广泛的概念,它还包括窗口管理器,但不包括框架管理器?是否可以只安装窗口管理器而不安装环境?
我用 Python、Common Lisp 等动态语言编写。因此,有时我会查看库的源代码,如果它们没有足够的文档,并且无法确定函数、构造函数等期望的输入数据类型是什么。在静态语言中,我会从类型描述中看到这一点,但在这里你必须猜测。也许有一些方法可以找出我不知道的预期类型?例如,该函数正在等待一个名为 id 的参数。在条件 c++ 中,我会看到字符串 id 并理解。
如何将传递的参数与无序的参数绑定?例如,在此示例中如何执行此操作:
let logWithEnding = console.log.bind(null, "\nThe End!");
logWithEnding("The Start");
“结束!” 在“开始”之后输出,而不是之前。在 Haskell 中,我可以执行以下操作:
logWithEnding start = consoleLog start "The End!"
编码:
function reverseArrayInPlace(array) {
for (var i = 0; i < Math.floor(array.length / 2); i++) {
var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
这是否意味着循环的每次迭代都会创建一个新变量 old?在 C/C++ 之后,我更喜欢这样写:
function reverseArrayInPlace(array) {
var old;
for (var i = 0; i < Math.floor(array.length / 2); i++) {
old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
什么更正确?
有没有区别:
var square = function(x) {
return x * x;
};
和
function square(x) {
return x * x;
};
我正在阅读https://eloquent-javascript.karmazzin.ru/chapter3并试图弄清楚如何正确声明函数。
最近,OP终于以这种形式向我解释了。现在谈到 Lisp) 是否可以快速解释 Lisp 中的宏是什么以及它们为什么漂亮?
当我从事 Python 和 C 的重复时,我的手不会以任何方式到达 Haskell。这个问题已经很久没有离开我的脑海了)我可以以某种方式简要回答它吗?
我愿意.sublime-build
。在另一个编辑器中,构建命令看起来像fpc %f
. 因此,Sublime 为文件名提供了另一个指令(不是%f
)。问题是什么?
{
"shell_cmd": "fpc здесь мне надо указать имя файла "
}
module People where
data Male = Man | Woman
class Human where
Male2 :: Male
instance Human Male where
Who :: Male -> String
Who = if Male == Man
then "Man"
else "Woman
GHCI 请抛出此错误
People.hs:6:5: error:
Invalid type signature: Male2 :: ...
Should be of form <variable> :: <type>
Failed, modules loaded: none.
所以我不明白出了什么问题。我对这门语言的了解并不出名,但我仍然无法想象我会在哪里犯错)
PROCEDURE Store* (VAR W: Files.Rider; T: Text);
VAR p, q: Piece;
R: Files.Rider;
off, rlen, pos: LONGINT;
N, n: INTEGER;
ch: CHAR;
奥伯伦。阅读有关模块的信息——还有大写关键字?只是这样的设计,还是真的是老语言的要求(比如Basic)?
标准规定块中的变量是在输入时创建的。但是在 C99 中,如果变量可以在其中声明而不是在块的开头呢?进入区块时它们是否仍然创建?
假设我初始化了一个二维数组:
double name[2][2];
我有打印出来的程序;它具有以下输出: 0.0 0.0 0.0 0.0 。它不应该得到一个随机值吗?如果我没有应用任何存储类,为什么它会被初始化为 null?例如,一维接收随机值。
我对函数范式很感兴趣,我什至尝试了一点 Scheme。但问题来了。在 Haskell 中,IO 可用于实现命令式行为。那么到底有多纯就不清楚了。函数式编程来自 lambda 演算,所以无副作用的想法是从那里来的?一个非常有趣且在我看来是正确的范例,但如果它不允许您与世界有任何联系,怎么可能想到它呢,因为 I/O 是一个可变状态。
引自 SICP:
内部定义必须位于过程体的开头。对于运行混合定义及其使用的程序的后果,管理部门概不负责。
正确的代码示例
(define (sqrt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))
这是否意味着我不能这样做?-
(define (test x)
(define (test2) (* x x))
(test2)
(define (test3) (+ x x))
(test3))
还是暗示我必须在使用它之前声明它?
(define (u13 x y z)
(+
(square (cond
((and (> x y) (> x z))) x)
((and (> y x) (> y z))) y)
(else z))
(square (cond
((and (> x y) (< x z))) x)
((and (> y x) (< y z))) y)
(else z)))
抛出错误。我了解格式错误,但我找不到它。平方定义为:
(define (square x) (* x x))
他们通常这样做:
sizeof <name_array> / sizeof <name_array>[0]
但毕竟,<name_array>
- 第一个元素 ( <name_array> == &<name_array>[0]
) 上的指针。那为什么它sizeof <name_array>
返回正确的数组大小。它的大小不存储在任何地方。