据我所知,vb6允许不带()的函数调用。只要该函数没有返回值,就可以使用func(same, params, here)。其他哪些语言也允许这样做?你认为不带括号的func应该表示什么?它们的规则是什么?
免责声明:我正在设计一种语言,如果您会因为我采用了这个想法而感到不满,请不要写下评论。
据我所知,vb6允许不带()的函数调用。只要该函数没有返回值,就可以使用func(same, params, here)。其他哪些语言也允许这样做?你认为不带括号的func应该表示什么?它们的规则是什么?
免责声明:我正在设计一种语言,如果您会因为我采用了这个想法而感到不满,请不要写下评论。
几乎所有来自ML系列的函数式语言(Miranda,Haskell,OCML,F#,SML等)在函数调用时不需要括号。
例如,在Haskell中:
Prelude> (\x->x) 1
1
Ruby
def hello_world name
puts "Hello world, #{name}."
end
hello_world 'Hal'
y = Math.pow 10, Math.floor Math.log10 x
成为:
var y = Math.pow(10, Math.floor(Math.log10(x)));
Ruby是另一种语言,它允许但不强制(在大多数情况下)在方法调用时使用括号。
在定义方法时,括号也是可选的。
def say_hi your_name
puts "Hello, #{your_name}!"
end
当一个方法作为另一个方法的参数时,Ruby 1.8.* 版本会发出有关需要在未来版本中使用括号的警告。请理解这个警告,然后在irb中尝试一下:
puts "guess what this does?".slice 6, 4
inc x = x + 1
res = inc 42
sum a b = a + b
res = sum 1 2
1
传递给sum
,然后使用2
调用生成的函数(柯里化)。a = f(g x)
b = f $ g x
print(square(parse "Hello"))
"Hello" |> parse |> square |> print
对比如下:
ToString(Parse(42))
"42".Parse().ToString()
(*(*SomePointer).SomeMember).Invoke();
SomePointer->SomeMember->Invoke();
Powershell函数在调用时不需要在参数周围加括号。尽管如此,这会引起很多混淆:
function test($a,$b) {
write-host $a
}
test(1,2)
(1,2)
在 Powershell 中是一个数组并且被传递给了 $a)Perl:
To call subroutines:
NAME(LIST); # & is optional with parentheses.
NAME LIST; # Parentheses optional if predeclared/imported.
&NAME(LIST); # Circumvent prototypes.
&NAME; # Makes current @_ visible to called subroutine.
F# 不需要参数 - 特别是在使用管道运算符时。
a(b(c(d(10)))) ;;
等同于:
10 |> d |> c |> b |> a ;;
(实际上类似于扩展方法的效果)
def echo( foo )
return foo
end
等同于:
def echo foo
return foo
end