小编jto*_*lle的帖子

什么是不带参数调用的函数?

是否有一个术语描述了一个函数,它不比没有参数的函数更简洁地采用任何参数?(例如,"高阶函数"意味着"将函数作为参数或返回函数的函数")

我自然会想到"无效",但当我看到"无效"时,我也会想到副作用.我正在考虑的情况是在以下讨论中找到的情况constantly:

这个功能性"模式"叫什么?

你可以创建一个不带参数的闭包,没有副作用,但仍然做一些有趣的事情.

language-agnostic closures functional-programming nomenclature

14
推荐指数
3
解决办法
3049
查看次数

VBA:是什么导致传递给ParamArray的这个字符串参数变为一个数字(看起来像一个指针)?

最终编辑:它确实似乎是一个编译器错误 - 请参阅接受的答案.

在Excel 2007中使用VBA,我在'Class1'中有以下代码:

Option Explicit

Public Function strange(dummy As String, ParamArray pa())
    Debug.Print pa(LBound(pa))
End Function

Public Sub not_strange(dummy As String, ParamArray pa())
    Debug.Print pa(LBound(pa))
End Sub

Public Function also_not_strange(ParamArray pa())
    Debug.Print pa(LBound(pa))
End Function
Run Code Online (Sandbox Code Playgroud)

以及模块中的一些模式代码:

Option Explicit

Public Function not_strange_either(dummy As String, ParamArray pa())
    Debug.Print pa(LBound(pa))
End Function

Public Sub outer(v)
    Dim c As Class1
    Set c = New Class1

    Call c.strange("", v(LBound(v)))
    Call c.not_strange("", v(LBound(v)))
    Call c.also_not_strange(v(LBound(v)))

    Call not_strange_either("", v(LBound(v)))
End Sub
Run Code Online (Sandbox Code Playgroud)

如果从立即窗口调用'outer',如下所示:

call outer(array("a"))
Run Code Online (Sandbox Code Playgroud)

我得到了看起来很奇怪的输出: …

excel vba compiler-bug

11
推荐指数
1
解决办法
1457
查看次数

从Excel VBA UDF调用时,Range.Precedents返回范围而不是其先例.有解决方法吗?

我有这个VBA功能:

Public Function testPrec(target As Range) As String
    testPrec = target.Precedents.Address(External:=False)
End Function
Run Code Online (Sandbox Code Playgroud)

在单元格C11中,我有这个公式:

=C6+C8
Run Code Online (Sandbox Code Playgroud)

如果我testPrec从即时窗口调用,它可以正常工作:

?testPrec([c11])
$C$6,$C$8
Run Code Online (Sandbox Code Playgroud)

编辑:如果从非UDF宏Sub调用它也可以正常工作.异常是UDF案例.

如果我从工作表中将其称为UDF:

=testPrec(C11)
Run Code Online (Sandbox Code Playgroud)

我刚回来"$ C $ 11".

有谁知道发生了什么,甚至更好地如何从UDF调用中获得实际的先例?(我正在使用Excel 2007.)

excel vba excel-2007 user-defined-functions

8
推荐指数
1
解决办法
2802
查看次数

是否有一个像'map'这样的函数的典型名称,它在参数列表列表上运行,而不是多个参数列表?

(我终于发布并接受了"不,没有,问题实际上并不是那么一般"的效果的答案.)

考虑Common Lisp函数'mapcar'.它接受一个函数和一些列表作为参数,并使用从每个列表中相同位置拉出的参数调用该函数.

标准库通常具有类似的函数,它采用单个列表,其中列表的每个元素都是函数的参数列表吗?什么是通常称为"标准"的功能?(这不是一个Lisp问题,但它是我知道的唯一功能语言+库.)

我想我在问一个像(在伪Lisp中)的操作:

(mapcar (curry #'apply function-to-map) list-of-arg-lists)
Run Code Online (Sandbox Code Playgroud)

已经有一个在多种语言或库中通用的名称(与'map'和'reduce'是常用操作的名称相同,而不仅仅是特定的库函数).

谢谢.

lisp naming functional-programming list map

7
推荐指数
1
解决办法
536
查看次数

调用函数和在纯函数式语言中实例化对象之间是否存在关系?

想象一个简单的(组成)语言,其中的函数如下所示:

function f(a, b) = c + 42
    where c = a * b
Run Code Online (Sandbox Code Playgroud)

(说它是Lisp的一个子集,包括'defun'和'let'.)

还想象它包含看起来像的不可变对象:

struct s(a, b, c = a * b)
Run Code Online (Sandbox Code Playgroud)

再次类比于Lisp(这次是一个超集),假设像这样的结构定义将生成以下函数:

make-s(a, b)
s-a(s)
s-b(s)
s-c(s)
Run Code Online (Sandbox Code Playgroud)

现在,考虑到简单的设置,似乎很清楚,当您调用'f'或'make-s'时,幕后发生的事情之间存在很多相似之处.一旦在呼叫/实例化时间提供'a'和'b',就有足够的信息来计算'c'.

您可以考虑将struct实例化为类似于调用函数,然后存储生成的符号环境,以便在调用生成的访问器函数时供以后使用.或者您可以将一个函数评估为创建一个隐藏的结构,然后将其用作评估最终结果表达式的符号环境.

我的玩具模型是否过于简单,以至于没用?或者它实际上是一种有用的方式来思考真正的语言是如何工作的?是否有任何真正的语言/实现,没有CS背景但对编程语言感兴趣的人(即我)应该学习更多关于探索这个概念?

谢谢.

编辑:感谢您的答案到目前为止.为了详细说明,我想我想知道的是,如果有任何真正的语言,那么学习语言的人被告知例如"你应该认为对象基本上是闭包".或者,如果存在任何真正的语言实现,那么实例化对象并调用函数实际上共享一些常见的(非平凡的,即不仅仅是库调用)代码或数据结构.

我所做的类比,我知道其他人之前做过的,在任何实际情况下,是否比单纯的类比更深入?

lisp language-agnostic functional-programming immutability

6
推荐指数
1
解决办法
212
查看次数

如何使用 R 和 ggplot2 使 annotation_custom() grob 与 scale_y_reverse() 一起显示?

我是 R 的新手,ggplot2而且相对较新。我可以在绘图上显示图片,并且可以使 y 轴反向缩放,但我不知道如何同时进行。例如:

library(ggplot2)

y=c(1,2,3)
x=c(0,0,0)
d=data.frame(x=x, y=y)

#following http://stackoverflow.com/questions/9917049/inserting-an-image-to-ggplot2/9917684#9917684
library(png)
library(grid)
img <- readPNG(system.file("img", "Rlogo.png", package="png"))
g <- rasterGrob(img, interpolate=TRUE)

#these work fine - either reversing scale, or adding custom annotation
ggplot(d, aes(x, y)) + geom_point()
ggplot(d, aes(x, y)) + geom_point() + scale_y_reverse()
ggplot(d, aes(x, y)) + geom_point() + annotation_custom(g, xmin=.23, xmax=.27, ymin=1.8, ymax=2.2)

#these don't...combining both reverse scale and custom annotation
ggplot(d, aes(x, y)) + geom_point() + annotation_custom(g, xmin=.23, xmax=.27, ymin=1.8, ymax=2.2) + scale_y_reverse() …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

6
推荐指数
1
解决办法
1922
查看次数

有没有办法为私有成员编写VBA类的相等测试而不暴露这些私有成员存在的知识?

我做了大量的Excel VBA编程,但不是很多面向对象的.这是偶然出现的东西,这让我感到困扰,我想知道是否有一些我缺少的东西.

在VBA中,假设我有一个C类定义了一些私有成员,如下所示:

'...

Private hidden1_ As Double
Private hidden2_ As Double

'...
Run Code Online (Sandbox Code Playgroud)

如果VBA像C++或(大多数?)支持OOP的其他语言一样工作,我可以编写一个成员函数来在C类实例之间进行相等测试,如下所示:

'Error: won't compile!
Public Function equal(cinst As C) As Boolean
    equal = (hidden1_ = cinst.hidden1_ And hidden2_ = cinst.hidden2_)
End Function
Run Code Online (Sandbox Code Playgroud)

当然,这不会在VBA中编译,因为类成员函数只能访问它们被调用的同一实例的私有类成员.我做过这种事情的最好的方法是改为定义两个成员函数,如下所示:

Public Function equalDef(hidden1 As Double, hidden2 As Double) As Boolean
    equalDef = (hidden1_ = hidden1 And hidden2_ = hidden2)
End Function

Public Function equal(cinst As C) As Boolean
    equal = cinst.equalDef(hidden1_, hidden2_)
End Function
Run Code Online (Sandbox Code Playgroud)

它很麻烦,它暴露了私有类成员存在的知识,但至少它避免实际暴露私有类成员的价值.

这是我能做的最好的吗?

编辑:

像往常一样,在回答之后,我意识到了一个更好的方式来表达这个问题.它的标题是"有没有更简洁的方法为私人成员的VBA类写一个平等测试?" 当迪克回答时.

oop vba encapsulation private-members

5
推荐指数
1
解决办法
1036
查看次数

我可以使用VBA函数将可接受值的(动态)列表返回到Excel的数据验证中吗?

对于给定的单元格,我选择数据/验证并将允许设置为"列表".我现在希望像这样设置Source:

= rNames(REGS)

但这不起作用(找不到名字).所以我去插入/名称/定义并通过简单地指定上面的公式创建"REGNAMES"(没有单元格范围).然后我返回数据/验证,当我像这样设置Source时:

= REGNAMES

现在我得到"Source当前评估为错误".不幸的是,即使忽略它,这个错误也不会消失.我可以在表格中创建一个范围公式,如下所示:

{= REGNAMES}

并将其拖到几个单元格的右侧,并忠实地返回rNames函数

选项#1 | 选项#2 | ...

也就是说,该函数返回预期的范围.

我知道我可以使用宏代码来操作VBA中该单元格的List设置.我不太喜欢这些副作用.我更喜欢一个基于函数的干净依赖树.任何想法如何让数据/验证接受从rNames返回的数组值?

谢谢.

PS:rNames将结果范围作为Variant返回,如果有任何影响的话.

excel vba excel-vba

5
推荐指数
1
解决办法
1万
查看次数

VBA将3维数组粘贴到表格中

我有一个3维阵列(5 x 5 x 3),我需要将(5 x 5 x 1)张贴到Sheet1,(5 x 5 x 2)到Sheet2,(5 x 5 x 3)到Sheet3.因为我在3个嵌套for循环中构建这个3维数组,所以我不能使用for循环来访问循环的(5 x 5)部分.是否有任何标识符告诉excel索引数组的所有元素,例如在MatLab中使用(1:end,1:end,1)?基本代码如下:

Sub practice_2()

Dim arr(1 To 5, 1 To 5, 1 To 3)
Dim a As Integer
Dim x As Integer
Dim y As Integer

    For a = 1 To 3
        For x = 1 To 5
            For y = 1 To 5
                arr(x, y, a) = x * y
            Next
        Next

        Sheets(a).Select
        'Following line is where I want to access the …
Run Code Online (Sandbox Code Playgroud)

excel vba multidimensional-array

4
推荐指数
1
解决办法
1万
查看次数

什么将"私人语言WTF"与仅仅糟糕的库/ API/DSL设计区分开来?

一些最有趣的每日WTF故事以私人语言为主.但是,特定于域的语言可能非常强大,并且似乎越来越受欢迎.当然,如果没有优秀的图书馆,我们就无法编程,但正如谚语所说,"图书馆设计就是语言设计".

没有人喜欢糟糕的API,但只是其中一个程度,或者WTF是一个完全不同的物种?显然这是主观的,所以我把它作为一个社区维基帖.(Stackoverflow联合创始人对一种特定的内部语言是否甚至是WTF有着不同的看法.)

我自己的预感是,这是一种普遍性的尝试,使WTF出现,但我想看看其他人的想法.

(这个问题是通过阅读JaredPar对这个问题的答案的评论引发的:https://stackoverflow.com/questions/901320/anti-joel-test/901361#901361)

(为了澄清一点,"私人语言"一词通常用于负面内涵,而"DSL"或"图书馆"则是中立的.如果有的话,"内部"工具在前往被嘲笑为一种可怕的"私人语言"除了可能使它成为一种坏工具的常见事物之外?这不一定是一种语言;它可能是一个图书馆或框架.)

最终编辑:我接受了罗杰佩特的回答:"实质上是什么?没有." 因为我觉得这个问题实际上是正确的.我想强调Aaronaught关于DSL的答案,因为我觉得它特别好.谢谢.

api dsl frameworks

3
推荐指数
1
解决办法
266
查看次数

是否有一个带有列表列表的函数的通用名称,并返回包含这些列表内容的单个列表?

编辑:我的问题是,原本"有没有一个标准名称,以展名单列表的功能,但只有一层深?",但查克的回答是措辞更接近我其实是想问问,所以我给它改名.不过,这三个答案对我都很有用.谢谢.

"扁平化"似乎是这需要一棵树,但是建立原子组成的列表深它们嵌套,但对于只有一个级别之后停止功能的功能广为接受的名字吗?所以((1 2)((3 4)(5 6))(7 8))"somethings"到(1 2(3 4)(5 6)7 8)."某些东西"在多种语言/库中是否有共同的名称?

这个问题的答案:

在Python中展平浅层列表

建议'链'可能是一个很好的猜测,但它是否足以成为"标准"?

naming functional-programming list

0
推荐指数
1
解决办法
178
查看次数