请教一下,有没有有这种语法的语言

2023-05-18 16:40:36 +08:00
 122281742

和 elixir 类似, 调用无参数的方法,不需要括号,就像引用一个变量一样,这个变量值为这个无参数方法的返回值

defmodule Demo do
    def noArg1 do
        1
    end

    def noArg2 do
        noArg1 + 1
    end
end
Demo.noArg1
output: 1
Demo.noArg2
output: 2
1293 次点击
所在节点    问与答
9 条回复
momocraft
2023-05-18 16:44:44 +08:00
ruby (也是 elixir 学习的对象)
TWorldIsNButThis
2023-05-18 16:47:04 +08:00
scala
anonydmer
2023-05-18 16:47:15 +08:00
1 楼正解
cyersvet
2023-05-18 19:57:25 +08:00
visual basic/vb 也是:

Function AddTwo()
AddTwo = 1 + 2
End Function

Sub Main()
result = AddTwo + 3
Debug.Print "Result is " & result
End Sub
yueqianzhang
2023-05-18 20:07:52 +08:00
有 计算属性的语言都符合要求
hsfzxjy
2023-05-18 22:38:24 +08:00
pascal 也是
via
2023-05-18 22:59:05 +08:00
是否意味着这种语言无法传递函数?
msg7086
2023-05-19 07:18:24 +08:00
@via 不是。只能说明当你只写函数名的时候不能传递函数。不能排除用其他表达方式传递。Ruby 中可以使用 Symbol 传递函数,也可以转换成 Proc 。

(另外 Ruby 中其实没有函数调用,只有 对象+方法 调用,而方法调用是用消息实现的,即 obj.f(a) 本质上是向 obj 发送 "f, a" 的消息。因此如果是以 Symbol 方式传入 method_name ,可以用 obj.call(method_name) 实现。如果是转成 Proc ,则是用调用 block 的方法,即 yield 实现。)

(最近几年写 Ruby 少了,不知道有没有记错的……)
TWorldIsNButThis
2023-05-19 15:59:44 +08:00
@via 可以有专门的函数引用语法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/941039

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX