Questions tagged «functions»

函数是执行特定任务的代码块。



1
为什么C库使用同名的宏和函数?
我正在阅读PJ Plauger的“标准C库”,这真的很有趣。该书不仅说明了如何使用该库,而且还说明了其实现方法。 我已经阅读完本ctype.h节,并且在标头中将函数声明为两个宏AND函数。例如 int isdigit(int); 但是也 #define isdigit(c) (_Ctype[(int)(c)] & _DI) 我不明白为什么两者都使用? 另外,如果我尝试重新创建自己的自定义ctype标头和实现,则只有删除宏(注释中的注释),我才能成功编译。 书中并没有真正解释这方面。有人可以解释一下吗?
20 c  naming  functions  macros 

1
将Scala函数传递给Java 8方法
以下Scala代码可以正常工作,并且可以传递给需要功能的Java方法。有没有更清洁的方法可以做到这一点?这是我的第一遍: val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } 这是我的第二遍-它使用Java-8 Function接口的通用包装器来简化Scala语法: // Note: Function1 is Scala's functional interface, // Function …

7
每个函数是否有最佳的代码行数?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 函数不仅用于最大程度地减少代码重复,而且还用于将长函数拆分为较小的函数以提高可读性,并使代码具有自注释性。但是,这种增益与每个函数或方法的LOC数量并不成反比;否则,我们将拥有大量功能,所有功能仅包含一行或两行代码。 这使我想知道:每个功能是否存在最优数量的LOC?如果是这样,那是什么,它在语言之间是否有差异?
18 functions 

5
为什么PHP函数签名如此不一致?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我正在查看一些PHP函数,但我不禁注意到以下内容: <?php function foo(&$var) { } foo($a); // $a is "created" and assigned to null $b = array(); foo($b['b']); var_dump(array_key_exists('b', $b)); // bool(true) $c = new StdClass; foo($c->d); var_dump(property_exists($c, 'd')); // bool(true) ?> 注意array_key_exists()和property_exists()功能。在第一个中,属性名(数组的键)是第一个参数,而在第二个中,属性名是第二个参数。凭直觉,人们会期望它们具有相似的签名。这可能会导致混淆,并且通过进行此类更正可能会浪费显影时间。 PHP或任何与此相关的语言是否不应该考虑使相关功能的签名保持一致?
17 php  naming  functions 

2
将带有指针参数的C ++方法转换为C函数是否可以接受?
我在ESP-32上使用C ++。注册计时器时,我必须这样做: timer_args.callback = reinterpret_cast<esp_timer_cb_t>(&SoundMixer::soundCallback); timer_args.arg = this; 计时器在这里 soundCallback。 注册任务时也是如此: xTaskCreate(reinterpret_cast<TaskFunction_t>(&SoundProviderTask::taskProviderCode), "SProvTask", stackSize, this, 10, &taskHandle); 因此,该方法在单独的任务中启动。 GCC总是警告我这些转换,但它按计划进行。 生产代码中可以接受吗?有一个更好的方法吗?
16 c++  c  functions 

4
无法解决Javascript函数之谜
我试图了解Javascript幕后的景象,并迷恋于了解内置对象的创建,尤其是对象和函数以及它们之间的关系。 当我读取到所有内置对象(如Array,String等)都是从Object扩展(继承)时,我假定Object是第一个被创建的内置对象,其余对象都继承自该对象。但是,当您知道对象只能由函数创建时,然后函数也不过是Function的对象而已,这没有任何意义。听起来开始像母鸡和鸡肉的困境。 另一个非常令人困惑的事情是,如果我console.log(Function.prototype)打印了一个函数,但是当我打印时console.log(Object.prototype)它打印了一个对象。为什么Function.prototype当它打算成为一个对象时是一个函数? 同样,根据Mozilla文档,每个javascript function都是Function对象的扩展,但是当您console.log(Function.prototype.constructor)再次将其作为函数时。现在,您如何使用自己创建的东西(思维=吹动)。 最后一件事Function.prototype是一个函数,但是我可以constructor使用来访问该函数Function.prototype.constructor,这意味着Function.prototype一个返回prototype对象的函数

6
一种基于限制传递给函数的参数数量的语言
这个想法的灵感来自事实运算符,例如+,-,%等,可以看作是传递了一个或两个参数且没有副作用的函数。假设我或其他人编写了一种语言,该语言可以阻止传递两个以上的参数,并且也只能通过返回值来工作: a)这样的语言会导致更容易理解的代码吗? b)代码流程会更清晰吗?(被强制执行更多的步骤,可能会减少“隐藏”的互动 c)限制是否会使该语言在更复杂的程序中显得过于庞大。 d)(奖励)对优点/缺点的任何其他评论 注意: 仍然必须做出两个决定-第一个是是否允许用户在main()或其等效外部进行输入,以及关于传递数组/结构时将发生什么的规则。例如,如果某人希望单个函数添加多个值,则可以通过将其捆绑到数组中来解决该限制。可以通过不允许数组或结构与其自身进行交互来阻止这种情况,例如,仍然可以使您根据位置将每个数字除以不同的数量。

8
功能与功能[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 4年前关闭。 我经常听到项目经理(项目经理)谈论特性和功能。而且我很困惑要区分它们。有时我认为功能等同于用户故事。诸如“作为用户,鲍勃应该能够看到他的付款清单”之类的东西,他们称其为功能。有时它变得像子系统一样大,例如“通过Web应用程序发送SMS的能力”。另一方面,功能有时会像“为数字输入实现数字分组”这样的任务一样小,而在某些情况下,它会像整个CRUD操作一样大。 我的问题是,如何区分功能和功能?

5
小功能与在相同功能中保持依赖功能
我有一个类,它设置节点数组并以类似图形的结构将它们彼此连接。最好是: 保留用于初始化和连接节点的功能 在两个不同的函数中具有初始化和连接功能(并具有必须调用这些函数的依赖顺序-尽管请记住,这些函数是私有的。) 方法1 :(因为一个功能要做两件事,但它会将依赖的功能分组在一起-除非先进行初始化,否则切勿连接节点。) init() { setupNodes() } private func setupNodes() { // 1. Create array of nodes // 2. Go through array, connecting each node to its neighbors // according to some predefined constants } 方法2 :(从某种意义上说,这是自记录的,但决不要在setupNodes()之前调用BUT connectNodes(),因此使用类内部知识的任何人都需要了解此顺序。) init() { setupNodes() } private func setupNodes() { createNodes() connectNodes() …

5
当定义写在源代码的末尾时,为什么需要用C语言对数据和函数进行“声明”?
考虑下面的“ C”代码: #include<stdio.h> main() { printf("func:%d",Func_i()); } Func_i() { int i=3; return i; } Func_i()是在源代码的末尾定义的,并且在main()。中使用之前没有提供声明。在编译器Func_i()进入的时候main(),它出来main()并找到了Func_i()。编译器会以某种方式找到返回的值Func_i()并将其提供给printf()。我也知道,编译器无法找到返回类型的Func_i()。它在默认情况下需要(猜测?)的返回类型的Func_i()是int。就是说,如果代码具有float Func_i(),编译器将给出错误:的类型冲突Func_i()。 从上面的讨论中我们看到: 编译器可以找到由返回的值Func_i()。 如果编译器可以找到返回的值Func_i()由未来的出来main()和向下搜索源代码,那么为什么就不能找到Func_i(),它的类型明确提及。 编译器必须知道它Func_i()是float类型的-这就是为什么它会产生冲突类型的错误的原因。 如果编译器知道该Func_i类型为float类型,那么为什么仍假定它Func_i()为int类型,并给出类型冲突的错误?为什么不强制使它Func_i()成为float类型。 我对变量声明也有同样的疑问。考虑下面的“ C”代码: #include<stdio.h> main() { /* [extern int Data_i;]--omitted the declaration */ printf("func:%d and Var:%d",Func_i(),Data_i); } Func_i() { int i=3; return i; } int Data_i=4; 编译器给出错误:未声明“ Data_i”(此函数中的首次使用)。 当编译器看到 Func_i(),它会进入源代码以查找Func_()返回的值。为什么编译器不能对变量Data_i做同样的事情? …

7
函数只返回不变的参数,没用吗?
我刚刚在我正在工作的项目中找到此功能: -- Just returns the text unchanged. -- Note: <text> may be nil, function must return nil in that case! function Widget:wtr(text) return text end 太可悲的是,编码器不再在公司工作。为什么要使一个函数什么都不做,但是返回调用它的参数呢? 这种功能有什么用,在本例中未指定,但在任何情况下都没有用? 由于 function aFunction(parameter) return parameter end 结束于 aFunction(parameter) == parameter 我为什么要写这样的东西 aFunction(parameter) == whatIWantToCheck 代替 parameter == whatIWantToCheck ?

4
一流的功能是否可以代替战略模式?
该战略的设计模式通常被认为是在缺乏这些语言的一流功能的替代品。 例如,说您想将功能传递给对象。在Java中,您必须向该对象传递另一个封装了所需行为的对象。在诸如Ruby之类的语言中,您只是以匿名函数的形式传递功能本身。 但是我在考虑它,因此决定也许Strategy提供的功能比普通的匿名功能还多。 这是因为对象可以保持独立于其方法运行时间的状态。但是,匿名函数本身只能保持在函数完成执行后就不复存在的状态。 在支持一流功能的面向对象语言中,策略模式相对于使用功能是否有任何优势?

2
没有作为过程实现的延续的例子是什么?
关于SO上的回调和延续之间的区别的有趣讨论引发了这个问题。根据定义,延续是完成计算所需逻辑的抽象表示。在大多数语言中,这表现为一个自变量过程,您可以将需要继续处理的任何值传递给该过程。 用纯函数式语言(其中所有函数都是纯函数并且是头等公民),我认为延续可以完全建模为函数。毕竟,这就是我以前对到目前为止的理解。但是,世界充满了状态(叹息),因此一般定义不需要连续捕获程序状态-它只需要包含意图。 为了帮助我理解,是否可以用功能语言提供一个示例,其中以比功能更抽象的方式表示延续?我知道Scheme可以让您以一流的方式(call / cc)来获取当前的延续,但是即使如此,似乎传递给call / cc的一个参数过程只是以另一种形式给出了当前的延续调用/ cc函数可以将其结果应用到的自变量过程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.