问题标签 [library-design]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 8 的日期时间包 DayOfWeek 枚举的顺序
我正在查看 Java 8 的新 datetime 包的教程。在关于 theDayOfWeek
和Month
enums的页面上,它说DayOfMonth
enum 从星期一到星期日运行。这是为什么?我使用过的所有其他系统(包括 .NET)都有从星期日开始的一周。
java - Java中的继承:命名冲突案例
这个问题不仅与Java有关,还与另一种面向对象的语言有关。我设计了一个简单的 UI 库,它有一个称为特殊接口的接口Drawer
,其中包含用于在某些图形表面上绘制控件和基元的抽象方法,我们可以在其中设置像素。它旨在构建在一些简单的图形平台之上。就目前而言,我使用 AWT 绘图引擎。问题是我创建了AWTDrawer
扩展java.awt.Canvas
和实现的类,Drawer
这是一个命名冲突:两个祖先都有SetColor
, getColor
,drawLine
方法。我怎样才能确定我想使用什么祖先的方法?
scala - 在类构造中引用 trait 之外的抽象类型
前提:
我想将实例化类所需的信息与“运行”类所需的信息分开。但是,“运行”课程所需的信息可能因课程而异。因此,我想这个类“有”运行它的特定信息,并且两者一起去。
这是我的代码示例:
这编译,通过测试,我很高兴。
问题:我使用val machine: Machine
它来定义def params: machine.Params
. 有人告诉我这样做是def
为了让实施者有更多的自由。如果我这样做,我将无法再参考machine.Params
在这一点上,我不知道如何继续。我一直在想,如果这应该是 adef
并且绝对不是 a val
,那么我的架构是错误的。
所以
- 考虑到我提出的前提,我解决这个问题的方法是错误的吗?
- 如果没有错,有没有办法在使用
def
而不是val
在MachineOwner
课堂上实现这一目标?
编辑 鉴于 Alexey Romanov 的回答,代码的最后一点看起来像这样
但这不会编译,因为它需要专门针对def machine: Machine { type Params = Params1 }
. 如何定义?
scala - Scala:包中的包对象与单例对象
我想在 scala 的库中分组一组类似的函数。这是我在其他地方看到的两种方法。我想了解两者之间的区别。
包中定义的单例对象
包对象
比较
据我所知,第一种方法需要functions
在您想使用其功能时显式导入对象。而包对象方法允许包中的任何东西在functions
不导入它们的情况下访问这些方法。
即,com.example.toplevel.functions.MyClass
可以com.example.toplevel.functions.foo
隐式访问。
我的理解正确吗?
如果在 中没有定义类com.example.toplevel.functions
,那么这些方法似乎是等价的,这是正确的吗?
python - 在内部类中使用外部类实例作为自我?
我正在为GMAIL API编写一个包装器。在这个包装器中,我试图在“主类”中包含子属性,因此它更接近于以下内容:
以前,我使用的方法如下:
这让我可以做到foo.get_method(...)
。要遵循 GMAIL API,我尝试执行以下操作:
这让我可以做到foo.method.get(...)
。上面有一些问题,它每次都重新定义类,我必须在@staticmethod
每个方法之上添加作为它的一部分。我确实意识到我可以在外部类级别创建类,并为每个隐藏变量设置一个隐藏变量,然后 .method 返回或创建,但这似乎是太多的解决方法。
tldr:是否可以将传递给内部类self
的实例作为外部类的实例(我不希望将外部类的属性传递给每个内部类)。
c - 在 C 中为库设计公共错误代码
我试图解决的一个设计问题是让客户端能够处理调用库函数时可能发生的错误的灵活方法是什么。我看到两种方法:
I.将任何库函数引发的所有错误放在一个公共的单独头文件中,例如
lib_errors.h
:
并将其包含在库的所有公共头文件中。
header1.h
:
header2.h
:
我看到的问题:库可以引发的所有错误都将包含在每个头文件中,即使是那些头文件本身没有引发的错误。
二、要在每个头文件中定义特定于头的错误:
header1.h
:
header2.h
我看到的问题:代码重复的数量随着常见错误的数量而增加。所有常见错误都必须在每个公共头文件中重复。
所以我目前很困惑该选择哪一个。可能还有另一种方法可以解决设计问题。第一种方法似乎更接近 POSIX errno
。
api - String 和 CharArray 应该是同一个东西吗?
在设计编程语言 API 时,有哪些优点和缺点:
- 字符的字符串类型和数组(或链接列表)是无法区分的。
喜欢在:Haskell、Erlang、C
- String是它自己的类型,而 chars类型的 Array(或linkedList)是不同的。
喜欢在:Java、C#、Lisp、JavaScript、...
api - Java 标准库:库中哪些方法的参数数量最多?
Java 标准库中哪些方法的参数数量最多?
注意:变量参数 (Varargs) 应计为数组类型的 1 个参数,而不是无限数量的参数。
原因:我正在尝试设计更好的库,并且我正在考虑禁止使用超过 4 个参数的方法......所以我试图在标准库中找到具有大量参数的方法并研究该方法并考虑是否需要这样定义,以及是否有一个有效的案例有超过 4 个参数。
c++ - 编写 C 头文件以便能够从 C++ 中使用
我正在研究一些应该在 C 和 C++ 中使用的库头文件。由于 C 没有命名空间概念,我将在头文件中定义的所有名称中添加“库前缀”。相比之下,对于 C++,我会定义一个命名空间。所以我目前认为设计是这样的:
mylib.h
我从来没有见过这样的事情,所以我不确定这是否普遍。是否不鼓励这样做?可能的缺点是什么?
scala - 如何进行嵌套导入
我正在尝试清理我的用户 api,以便用户可以巧妙地从单个包对象中导入,并获取里面的所有内容。我意识到我可以将我的包裹移动到顶部包裹中,但我想知道是否有办法执行以下操作(我知道这可能不是最佳实践):
我有以下软件包:
现在这将需要导入以下形式:
我被要求做的事情如下:
这样我的最终用户就可以简单地执行以下操作:
从我在这里读到的内容,我理解这意味着嵌套导入是不可能的。
那么我想做的事情是不可能的吗?我意识到存在其他方式。