有没有办法缩短这个if陈述的条件?
int x;
if (x != 3 && x != 8 && x != 87 && x != 9){
SomeStuff();
}
Run Code Online (Sandbox Code Playgroud)
我想的是这样的事情:
if (x != 3, 8, 87, 9) {}
Run Code Online (Sandbox Code Playgroud)
但我试过了,它不起作用.我是否只需要将其全部写出来?
说实话,我不知道怎么说这个问题所以请原谅我,如果实际问题不是你所期望的基于标题.C#是我编写过的第一个静态类型的语言,到目前为止,它对我来说是一个绝对头疼的问题.我很确定我对于如何以静态类型的方式设计系统的核心思想没有很好的处理.
这是我想要做的一个粗略的想法.假设我有一个类的层次结构,如下所示:
abstract class DataMold<T>
{
public abstract T Result { get; }
}
class TextMold : DataMold<string>
{
public string Result => "ABC";
}
class NumberMold : DataMold<int>
{
public int Result => 123
}
Run Code Online (Sandbox Code Playgroud)
现在假设我想要列出项目列表,其中项目可以是任何类型的模具,我可以Result在foreach循环中获取每个项目的属性,如下所示:
List<DataMold<T>> molds = new List<DataMold<T>>();
molds.Add(new TextMold());
molds.Add(new NumberMold());
foreach (DataMold<T> mold in molds)
Console.WriteLine(mold.Result);
Run Code Online (Sandbox Code Playgroud)
正如您可能已经知道的那样,这不起作用.从我在搜索中看到的内容来看,它与我无法将List声明为类型这一事实有关DataMold<T>.这样做的正确方法是什么?
我最近对 JavaScript 中的工厂函数模式感兴趣。课程可能很干净,但我发现他们也有很多问题。(我什至不会谈论它们,因为这根本不是这个问题的目的。)
然而,工厂功能的一个主要方面我并不清楚。
如果我错了,请纠正我,但在 JavaScript 类中,我的方法被放置在生成的对象的原型上,因此它们只创建一次。这意味着类内部使用的构造函数不会将方法作为属性添加到每个新对象,这从概念上讲意味着这些方法属于类而不是对象实例。
class Example {
constructor(message) {
this.message = message;
}
sayMessage() {
console.log(this.message);
}
}
let a = new Example("Hello!");
a.sayMessage(); // Outputs "Hello!"
console.log(Object.getOwnPropertyNames(a));
// Outputs ["message"]
Example.prototype.sayMessage = function() {
console.log(this.message + " Modified!");
};
let b = new Example("Hello!");
b.message = "Goodbye!";
b.sayMessage(); // Outputs "Goodbye! Modified!"
Run Code Online (Sandbox Code Playgroud)
在上面的类中,sayMessage该类的每个实例都有相同的函数。正如所演示的,甚至可以稍后在原型上进行更改,更新该类的所有现有实例。我不能肯定地说我认为这是否是好事,但它确实有道理。
然而,在工厂函数中,返回的对象似乎只具有作为普通属性附加到它的所有需要的方法。
function Example(message) {
let sayMessage = function() {
console.log(this.message);
};
return {
message: message,
sayMessage: sayMessage
};
}
let a …Run Code Online (Sandbox Code Playgroud) 假设我有以下简单的项目结构。
project/
package/
__init__.py
__main__.py
module.py
requirements.txt
README.md
Run Code Online (Sandbox Code Playgroud)
在对谷歌做了一些研究之后,我试图让它反映一个非常简单的控制台应用程序的一般最佳实践(但不像简单的只有一个脚本那么简单)。假设__init__.pycontains simpleprint("Hello from __init__.py")并且module.py包含一个类似的语句。
我应该如何在 内部进行导入__main__.py,然后我应该如何运行我的项目?
首先让我们说它__main__.py看起来很简单:
import module
print("Hello from __main__.py")
Run Code Online (Sandbox Code Playgroud)
如果我使用简单的命令运行我的项目python package,我会得到以下输出:
Hello from module.py
Hello from __main__.py
Run Code Online (Sandbox Code Playgroud)
可以看出,__init__.py没有跑。我认为这是因为我将我的项目包作为脚本运行。如果我改为使用命令将其作为模块运行,则会python -m package得到以下输出:
Hello from __init__.py
Traceback (most recent call last):
File "C:\Users\MY_USER\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Users\MY_USER\AppData\Local\Programs\Python\Python38\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\Users\MY_USER\PATH\TO\PROJECT\project\package\__main__.py", line 1, in <module>
import …Run Code Online (Sandbox Code Playgroud) 我一直在与Webpack一起尝试并理解它的工作原理,但是无论我做什么,在考虑文档和大量视频的内容后,它似乎都并没有达到我的期望。
作为实现最终目标的第一步,我只想将./src目录中的所有文件复制到./dist目录中,并保持完整的文件夹结构。经过一番挖掘后,看来我的规则中需要的是这样的东西webpack.config.js(我目前在源目录中仅出于测试目的只有html,css和js文件):
test: /\.(html|js|css)$/,
use: [
{
loader: 'file-loader',
options: {
name: '[path][name].[ext]'
}
}
]
Run Code Online (Sandbox Code Playgroud)
现在在entry.js根目录中的文件中,我有以下内容:
function requireAll (r) { r.keys().forEach(r); }
requireAll(require.context('./src/', true, /\.(html|js|css)$/));
Run Code Online (Sandbox Code Playgroud)
...由于我的理解,我需要将所有要处理的文件导入到我的条目文件中,然后可以使用将它们放置到新目录中file-loader。
通过此设置,运行webpack将创建一个dist文件夹,如下所示:
dist/
chunk.js <-- (the output filename set in my webpack config)
entry.js <-- (an exact duplicate of the entry file)
Run Code Online (Sandbox Code Playgroud)
这显然不是我想要的。我不知道我是否只需要调整设置,或者我做错了什么。
我在 Raspberry Pi 上使用 GCC 为我正在学习的课程编译一些汇编代码。根据我从GNU 汇编器参考中的信息了解到,我可以在 GNU ARM 汇编中重现以下 C 代码:
int num = 0;
Run Code Online (Sandbox Code Playgroud)
通过这样写:
.data
num: .word 0
Run Code Online (Sandbox Code Playgroud)
伟大的!现在我该怎么写呢?
int num;
Run Code Online (Sandbox Code Playgroud)
据我了解,像这样保留未初始化的变量意味着我应该将其视为包含之前内存位置中的任何垃圾值。因此,在以某种方式赋予它值之前,我不应该使用它。
但假设由于某种原因我打算在内存中存储大量数据,并且需要为其保留大量空间。在我看来,如果我无论如何都要用一些数据填充整个内存区域,那么将其初始化为某个值将是对资源的巨大浪费。然而,据我所知,如果不将其初始化为某个值,似乎无法在 GCC ARM Assembly 中创建标签。根据我的汇编教科书,该.word指令后面可以有零个表达式,但如果以这种方式使用“那么地址计数器不会前进,并且不会保留任何字节”。我的第一个想法是使用“.space”或“.skip”指令,但对于该指令,甚至官方文档也说“如果省略逗号和填充,则假定填充为零”。
有没有办法让我保留一块内存而不在 GCC ARM Assembly 中初始化它?