草庐IT

Abstraction

全部标签

ruby - ruby 中的过程和数据抽象

我是Ruby新手。我正在学习ruby​​中的抽象原则。据我了解,过程抽象是对用户隐藏实现细节,或者只是专注于要点而忽略细节。我关心的是如何实现它1)是不是一个简单的函数调用就这样#functiontosortarray#@paramsarray[Array]tobesortdefmy_sort(array)returnarrayifarray.sizearray[i+1]array[i],array[i+1]=array[i+1],array[i]swapped=trueendendendarrayend然后这样调用sorted_array=my_sort([12,34,123,43,

ruby - 为什么数字不支持 .dup?

>>a=5=>5>>b="hello,world!"=>"hello,world!">>b.dup=>"hello,world!">>a.dupTypeError:can'tdupFixnumfrom(irb):4:in`dup'from(irb):4我知道每次您将整数分配给新变量时Ruby都会复制一份,但为什么Numeric#dup会引发错误?这不会破坏抽象,因为所有对象都应该正确响应.dup吗?据我所知,重写dup方法将解决问题:>>classNumeric>>defdup()>>self>>end>>end这是否有我没有看到的缺点?为什么不将其内置到Ruby中?

javascript - Node.js如何实现多态?

我正在尝试使用node.js和其他相关技术来实现一个应用程序。从Java领域出发,多态性很自然,但对于经典程序员来说,Node的工作方式不同。应用程序将在用户提供的运行时加载新代码。为了让主要核心使用此代码,“我们”需要就某种约定达成一致。知道Node有多新,我对找不到答案并不感到惊讶。问题是这个问题在JS中也相当模糊。要求:强脱钩。在运行时加载新代码。该解决方案应该适用,这样我就可以与浏览器共享尽可能多的代码。更新:我确实摆弄过duck-typing,我还遇到了Clojure在基于协议(protocol)的实现方面的想法。我希望能在答案中加入一些代码。 最

javascript - 像 ExtJS 一样编程 jQuery UI

我正在尝试为jQueryUI开发一个抽象层,允许将小部件定义为对象,就像(或类似)ExtJS。这是概念:varmydialog=new$.ui.dialog({modal:true,renderTo:'body',title:'TheWindowsTittle',content:'ThecontentoftheWindow'});现在我可以说:mydialog.show();第一步(我认为)是向jQuery添加类创建函数,这允许创建类:$.MYNAMESPACE.dialog=$.Class({constructor:function(){}//methodsandproperties

go - Go 中的抽象模式

我有两个接口(interface)。它们几乎相同,唯一的区别是Set方法:typeCache1interface{Set(key,valueinterface{},ttltime.Duration)bool}typeCache2interface{Set(key,valueinterface{})bool}知道如何将它们统一为一个抽象概念吗?当然,我可以将ttltime.Duration添加到第二个接口(interface),但它在那里没有用,并且会降低代码的可读性。如果存在的话,你能建议复杂的模式吗? 最佳答案 我想,在合并这些方

go - GO 中的开放式设计和可扩展性

我尝试在go中实现某种具有可扩展性的开放式设计范例,但想知道这样做的gopher方法是什么。例如我有一个车辆包。根据可用的实现方式,我想创建一个包含所有可能车辆的数组。在这个例子中,如果只有自行车可用,我想要一个数组[bike]如果还有另一个汽车实现,我想要[bike,car]我真的不知道如何在go中执行此操作。我想到了车辆包中的接口(interface),但我真的不知道如何根据可用的包创建数组。这应该是开放式设计,这样如果有人决定编写另一辆车,一辆卡车,即它会自动在上游工作。所以这是解释问题的一些示例代码:如果没有必要,它们被分成包,它们也可以在同一个包(车辆)中车辆.gopacka

c# - 可移植类库不支持System.IO,为什么?

我创建了一个可移植类库,用于我的Monodroid项目。但问题是我需要System.IO库,但不幸的是我无法添加它。我什至尝试通过“添加引用”选项添加它,但没有成功。为什么会这样?我该怎么做? 最佳答案 您不能使用System.IO,因为它不是可移植类库。System.IO进行特定于其运行的操作系统(Windows)的调用,而可移植类库是跨平台的。可以找到您正在寻找的解决方案here:Whatshouldyoudowhenyou’retryingtowriteaportablelibrarybutyouneedsomefunctio

c# - C#中的重用抽象原则

在我们的C#MVC应用程序中,我们有很多接口(interface)与实现它们的对象一对一映射。即:基本上,对于创建的每个对象,都执行了“提取接口(interface)”操作。Moq使用这些接口(interface)为我们的单元测试生成模拟对象。但那是唯一一次重新使用接口(interface)。我们系统中没有具体对象实现多个接口(interface)。谁能告诉我这是否会在以后造成问题?如果是这样,它们会是什么?我在想,我们的应用程序有很多重复,例如在这两个接口(interface)中(编辑:在我们的服务层中)唯一不同的是方法名称和它们采用的参数类型,但是从语义上讲,他们对发送消息的存储库

c# - 将成员委托(delegate)给经典函数有更多优点或缺点?

classmy_class{publicintadd_1(inta,intb){returna+b;}publicfuncadd_2=(a,b)=>{returna+b;}}add_1是一个函数,而add_2是一个委托(delegate)。然而,在这种情况下,委托(delegate)可以扮演类似的角色。由于先例和语言的设计,C#方法的默认选择应该是函数。然而,这两种方法各有利弊,所以我列出了一份list。这两种方法还有更多优点或缺点吗?传统方法的优势。更传统函数的外部用户看到命名参数-对于add_2语法arg_n和类型通常没有足够的信息。与intellisense配合使用效果更好-ty

javascript 抽象控制台日志记录

我想做一个函数,像这样。例如:functionLogger(){this.log=function(msg){console.log(msg);}}我想在函数/模块等中使用它,一切正常。但是我浏览器中的默认控制台通常会给出文件名+行号。现在,当我抽象此功能时,fileName和lineNumber不在我放置instance.log()的位置。因为它会说明调用console.log的位置,而不是函数本身。所以我的问题是:如何从我想使用我的记录器的地方获得正确的信息?或者请给我任何改进此功能的提示。 最佳答案 functionLogge