天道酬勤,学无止境

types

PHP 属性作为对象(PHP property as object)

问题 是否可以将类的属性设置为对象? 喜欢: class User { public $x = ""; public $y = new ErrorVO(); public $w = new array(); } 回答1 在构造函数中,是的。 class User { public $x = ""; public $y = null; public $w = array(); public function __construct() { $this->y = new ErrorVO(); } } 编辑 KingCrunch 提出了一个很好的观点:你不应该对你的依赖项进行硬编码。 您应该将它们注入您的对象(控制反转 (IoC))。 class User { public $x = ""; public $y = null; public $w = array(); public function __construct(ErrorVO $y) { $this->y = $y; } } new User(new ErrorVD()); 回答2 只是我的首选解决方案,即使其他人已经解释了一切:注射 class A { public $a; public function __construct (ErrorVO $a) { $this->a = $a; } } 这使类保持可测试性

2021-12-05 09:11:28    分类:技术分享    php   object   properties   types

查看复杂 OCaml 代码中的推断类型(See inferred types in complex OCaml code)

问题 我是一个 OCaml 新手,正在处理一些我没有编写的非常复杂的(至少对我而言)OCaml 代码。 如果我可以看到某些值的推断类型,那么理解它会很有帮助,就像我可以通过将鼠标悬停在任何值上来处理 F# 和 Visual Studio,例如: (截图借自 http://theburningmonk.com/2010/01/learning-f-part-1/) 我想我可以分解代码并将其提供给顶层以获取类型,但是还有其他更简单的方法吗? 回答1 首先,您必须使用-annot标志编译您的文件 ( foo.ml )。 这会生成注释文件 ( foo.annot ),其中包含有关内部所有标识符的类型信息。 您可以将其作为生成文件或构建过程的一部分。 然后,您需要依靠您的 IDE 来显示该信息。 我在 Tuareg(emacs 模式)中使用Ctrl + C 、 Ctrl + T 执行此操作,这会突出显示当前表达式并显示其类型。 回答2 OcaIDE 是 Eclipse 的 O'Caml 插件,可在编辑代码时动态显示推断的类型。 例子: 回答3 您可以将代码输入到 ocaml 顶层。 是的,它没有那么漂亮,但它会显示类型。 回答4 在阅读 OCaml 代码时,对我.mli是从.mli文件开始,看看项目的整体结构是什么。 从那里开始,并了解什么是依赖项,您可以从顶层进行探索。 或者

2021-12-05 09:09:14    分类:技术分享    types   ocaml   type-inference

为什么操作赋值运算符在 Java 中不是类型安全的?(Why aren't op-assign operators type safe in java?)

问题 我不确定这个问题的措辞是否明确,但举个例子会更清楚。 我发现这在 Java 中不起作用: int a = ...; a = 5.0; 但这将: int a = ...; a += 5.0; 即,似乎 = 运算符是类型安全的,但 += 不是。 这是否有任何深层原因,或者只是语言设计人员必须采取的另一种任意决策。 回答1 原因是数学运算做了一些隐式转换: a += 5.0; 评估如下: a = (int) ((double) a + 5.0); 但是,赋值需要显式转换。 (它可能是 float 而不是 double,我不记得哪个 Java 将其视为十进制文字。) 回答2 为了让生活更轻松。 让我们走得更远一点。 考虑: byte b; ... ++b; 增量确实在做: b = (byte)(1 + (int)b); 即使使用+=它也不会变得更好: b += b; 是: b = (byte)((int)b+(int)b); 这将使这些运算符对字节/短/字符无用。 当然,除非我们有任意大小的整数,否则我不会高兴。

2021-12-05 07:58:30    分类:技术分享    java   types   operators   language-features

如何区分对象文字和其他 Javascript 对象?(How can I differentiate between an object literal other Javascript objects?)

问题 更新:我正在重新表述这个问题,因为对我来说重要的一点是识别对象文字: 如何区分对象字面量和任何其他 Javascript 对象(例如 DOM 节点、Date 对象等)? 我该如何编写这个函数: function f(x) { if (typeof x === 'object literal') console.log('Object literal!'); else console.log('Something else!'); } 这样它只打印Object literal! 由于下面的第一次调用: f({name: 'Tom'}); f(function() {}); f(new String('howdy')); f('hello'); f(document); 原始问题 我正在编写一个 Javascript 函数,该函数旨在接受对象文字、字符串或 DOM 节点作为其参数。 它需要稍微不同地处理每个参数,但目前我无法弄清楚如何区分 DOM 节点和普通的旧对象文字。 这是我的函数的一个大大简化的版本,以及我需要处理的每种参数的测试: function f(x) { if (typeof x == 'string') console.log('Got a string!'); else if (typeof x == 'object') console.log('Got an

2021-12-05 07:31:42    分类:技术分享    javascript   types   comparison   object-literal

在 C++ 中将非 const 转换为 const(casting non const to const in c++)

问题 我知道您可以使用const_cast将const转换为非const 。 但是,如果您想将非const为const您应该使用什么? 回答1 const_cast可用于删除或添加对象的常量。 当您想要调用特定的重载时,这会很有用。 人为的例子: class foo { int i; public: foo(int i) : i(i) { } int bar() const { return i; } int bar() { // not const i++; return const_cast<const foo*>(this)->bar(); } }; 回答2 从 C++17 开始的 STL 现在为这种情况提供std::as_const 。 请参阅:http://en.cppreference.com/w/cpp/utility/as_const 用: CallFunc( as_const(variable) ); 代替: CallFunc( const_cast<const decltype(variable)>(variable) ); 回答3 您不需要const_cast来添加const ness: class C; C c; C const& const_c = c; 请通读此问题和答案以了解详细信息。 回答4 如果您愿意,您可以使用const_cast

2021-12-05 07:11:09    分类:技术分享    c++   types   casting   constants

C++ 中的抽象类声明(abstract class declarations in c++)

问题 假设foo是一个抽象class在C ++程序,为什么是可以接受的申报类型的变量foo* ,但不是类型foo ? 回答1 因为如果你声明一个 foo 你必须初始化/实例化它。 如果声明 *foo,则可以使用它来指向从 foo 继承但不是抽象的类的实例(因此可以实例化) 回答2 您不能实例化抽象类。 并且以下声明之间存在差异。 // declares only a pointer, but do not instantiate. // So this is valid AbstractClass *foo; // This actually instantiate the object, so not valid AbstractClass foo; // This is also not valid as you are trying to new AbstractClass *foo = new AbstractClass(); // This is valid as derived concrete class is instantiated AbstractClass *foo = new DerivedConcreteClass(); 回答3 此外,由于抽象类通常用作父类(基类 - ABC's),您将其用于多态 class Abstract {} class

2021-12-05 04:39:34    分类:技术分享    c++   variables   types   abstract-class   declaration

Oracle 10g:CLOB 数据长度可以小于 4,000 吗?(Oracle 10g: Can CLOB data lengths be less than 4,000?)

问题 我们有三个数据库:dev、staging 和 production。 我们在开发环境中完成所有编码。 然后我们将所有代码和数据库更改推送到暂存,以便客户端可以看到它在实时环境中的工作方式。 在他们签字后,我们对生产环境进行最终部署。 现在,关于这些 CLOB 列:当使用 desc 和/或查询 dev 数据库的 all_tab_columns 视图时,CLOB 显示的数据长度为 4,000。 但是,在临时数据库和生产数据库中,与开发等效的 CLOB 列的数据长度是奇数,例如 86。我已经搜索了所有可能的解决方案,以了解这是如何发生的。 我什至尝试添加一个新的 CLOB(86) 列,认为它会像 VARCHAR2 一样工作,但 Oracle 只是吐出一个错误。 DBA 会不会搞砸了一些事情? 这还有什么可担心的吗? 似乎没有任何事情因此而中断,但我只是喜欢元数据在所有环境中都相同。 回答1 首先,我 - 作为一名 dba - 看到你和 dba 之间缺乏合作感到遗憾。 我们都需要合作才能成功。 Clob 数据长度可以小于 4000 字节。 create table z ( a number, b clob); Table created. insert into z values (1, 'boe'); 1 row created. exec dbms_stats.gather

2021-12-05 04:26:46    分类:技术分享    oracle   oracle10g   types   clob

C#中的字符串转二进制(String to Binary in C#)

问题 我有一个将字符串转换为十六进制的函数, public static string ConvertToHex(string asciiString) { string hex = ""; foreach (char c in asciiString) { int tmp = c; hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString())); } return hex; } 你能帮我根据我的示例函数写另一个字符串到二进制函数吗? public static string ConvertToBin(string asciiString) { string bin = ""; foreach (char c in asciiString) { int tmp = c; bin += String.Format("{0:x2}", (uint)System.Convert.????(tmp.ToString())); } return bin; } 回答1 干得好: public static byte[] ConvertToByteArray(string str, Encoding encoding) { return encoding.GetBytes(str); } public

2021-12-05 04:03:52    分类:技术分享    c#   string   binary   types

确定 DLL 中包含的类正在使用的 c# 应用程序的类型(Work out the type of c# application a class contained in a DLL is being used by)

问题 有什么办法可以在 C# 中知道正在运行的应用程序的类型。 Windows 服务 ASP.NET Windows 窗体控制台 我想对应用程序类型做出反应,但找不到确定它的方法。 回答1 您应该让客户端代码告诉您的代码上下文是什么,然后从中工作。 充其量,您将能够根据外部因素进行猜测。 如果您必须猜测,这就是我要寻找的: 对于 ASP.NET,我会寻找 HttpContext.Current 对于 Windows 窗体,我查看 Application 类上的静态 OpenForms 集合中是否有任何项目。 对于 Windows Presentation Foundation,查看 Application 类的静态 Current 属性是否不为空。 对于服务,确实没有办法确定这一点,因为服务不必注册进程句柄、线程句柄等。 对于控制台窗口,如果以上都不是真的,那么我会假设这是一个控制台。 回答2 尝试检查 Application.MessageLoop。 对于 Windows 窗体应用程序(具有 WinForms 消息循环)应该是正确的,对于 Windows 服务应该是错误的。 我不知道 ASP.NET 会返回什么。 对于控制台应用程序,它们没有消息循环,因此它们会返回 false。 您可以使用 Console 类中的大多数属性来检查它,但我警告您这是一个 HACK。 如果你必须

2021-12-05 03:33:26    分类:技术分享    c#   .net   dll   assemblies   types

为什么指针不能适应不同类型的变量,即使 sizeof 相同?(Why can't pointer fit variable of different type, even though sizeof is same?)

问题 为什么任何指针的大小都是 4 或 8 个字节,但它不能适应任何不同的变量? 尝试为双指针分配 int 指针值时出错。 int *int_ptr{nullptr}; float *float_ptr{nullptr}; double *double_ptr{nullptr}; long double *long_double_ptr{nullptr}; string *string_ptr{nullptr}; vector<int> *vector_ptr{nullptr}; cout << "sizeof int pointer is " << sizeof int_ptr; //8 or 4 cout << "sizeof float pointer is " << sizeof float_ptr; //8 or 4 cout << "sizeof double pointer is " << sizeof double_ptr; //8 or 4 cout << "sizeof double double pointer is " << sizeof long_double_ptr; //8 or 4 cout << "sizeof string pointer is " << sizeof string_ptr; //8 or 4 cout << "sizeof

2021-12-05 02:08:22    分类:技术分享    c++   pointers   types   casting   strong-typing