Julia 我可以使用<;-而不是朱莉娅?
就像在R中:Julia 我可以使用<;-而不是朱莉娅?,julia,Julia,就像在R中: a <- 2 应该翻译成什么 a = 2 如果可能,请注意方法重载。否。=在Julia中不是运算符,不能分配给其他符号。=在Julia中重载过多(不是多重分派意义上的) 它绑定了一个新变量。如a=3所示。您将无法使用←而不是=,因为在Julia中不能重载绑定 它被降低到setindex。如中所示,a[i]=b被降低到setindex!(a、b、i)。不幸的是,setindex接受3个变量,而←只能接受2个变量。因此,您不能用3个变量重载= 但是,例如,您只能使用2个变量
a <- 2
应该翻译成什么
a = 2
如果可能,请注意方法重载。否。
=
在Julia中不是运算符,不能分配给其他符号。=
在Julia中重载过多(不是多重分派意义上的)
a=3
所示。您将无法使用←在此上下文中,代码>而不是=
,因为在Julia中不能重载绑定
setindex代码>。如中所示,a[i]=b
被降低到setindex!(a、b、i)
。不幸的是,setindex代码>接受3个变量,而←代码>只能接受2个变量。因此,您不能用3个变量重载=
但是,例如,您只能使用2个变量并重载a[:]=b
。因此,您可以定义←(a,b)=(a[:]=b)
或←(a,b)=设置索引!(a,b,:)
a.=b
降低到(Base.broadcast!)(Base.identity,a,b)
。您可以通过定义←(a,b)=(a.=b)
或←(a,b)=(Base.broadcast!)(Base.identity,a,b)
←代码>。祝你好运;)
顺便说一句,如果你真的想使用←代码>要进行绑定(如1),唯一的方法是使用宏。但是,你必须在每个作业前写一个宏,这看起来不太好
此外,如果您想探索如何降低Julia中的运算符,请执行f(a,b)=(a.=b)
,例如,然后@code\u降低f(x,y)
免责声明:如果您要尝试下面我的(仍然是初学者)实验,您将承担全部责任!:P
MacroHelper是我计划在将来使用的模块(非常感谢@Alexander_Morley和@DanGetz),我们可能会在这里尝试:
julia> module MacroHelper
# modified from the julia source ./test/parse.jl
function parseall(str)
pos = start(str)
exs = []
while !done(str, pos)
ex, pos = parse(str, pos) # returns next starting point as well as expr
ex.head == :toplevel ? append!(exs, ex.args) : push!(exs, ex)
end
if length(exs) == 0
throw(ParseError("end of input"))
elseif length(exs) == 1
return exs[1]
else
return Expr(:block, exs...) # convert the array of expressions
# back to a single expression
end
end
end;
使用上面的模块,您可以定义简单的测试“语言”:
通过使用它,您可能会得到您想要的:
julia> using TstLang
julia> tst```
a ← 3
println(a)
a +← a + 3 # maybe not wanted? :P
```
3
9
性能如何
julia> function test1()
a = 3
a += a + 3
end;
julia> function test2()
tst```
a ← 3
a +← a + 3
```
end;
julia> test1(); @time test1();
0.000002 seconds (4 allocations: 160 bytes)
julia> test2(); @time test2();
0.000002 seconds (4 allocations: 160 bytes)
如果您希望看到语法高亮显示(例如在atom editor中),则需要以不同的方式使用它:
function test3()
@tst_cmd begin
a ← 3
a ← a + a + 3 # parser don't allow you to use "+←" here!
end
end;
我们希望未来的Julia IDE也能语法突出显示cmd宏
上面的“解决方案”会有什么问题?我对朱利安没有那么多经验P(在这一刻,我想到了“宏观卫生”和“全球范围……”
但你们想要的是对某些人有好处,而不是重新定义语言的基础!这是因为可读性非常重要,如果每个人都会重新定义一切,那么它将在巴别塔结束…我遗漏了什么吗<代码>常量← = =代码>不起作用。我在文档中找不到任何内容…您需要使用=
运算符为julia lang中的变量赋值。这就是问题所在,是否可以将其他内容映射为=
。例如,我们可以执行const← = +代码>和它预期的一样。嗯,你可以重载许多操作符,比如+,-
甚至≡代码>。它们在Base中,例如Base.:+
或Base.:-
,但没有Base.:=
。似乎=
不是一个函数,请尝试使用例如@哪个a=3
“因为您不能在Julia中重载绑定”。出现这种情况有技术原因吗?或者仅仅是因为他们从未实现过它?变量绑定是一种语言中非常基本的操作。当您定义任何函数f(a,b)=。。。等等。
在Julia中,不可能像使用a=…等等那样为a赋值。因此,如果您想拥有自己的角色来进行变量绑定,就必须更改语言本身。可能变量绑定没有实现两个字符的原因是它是多余的,可能会让阅读代码的人感到困惑。也有一些关于这方面的讨论,希望其他答案是有启发性的,但这是唯一一个我可以真正认可的没有启用坏东西的答案。试图用不同的语法来表达=
真的是逆流而行,只会带来痛苦和痛苦。我的意思是,我已经可以做常量-=+
,让大家都感到困惑。
julia> function test1()
a = 3
a += a + 3
end;
julia> function test2()
tst```
a ← 3
a +← a + 3
```
end;
julia> test1(); @time test1();
0.000002 seconds (4 allocations: 160 bytes)
julia> test2(); @time test2();
0.000002 seconds (4 allocations: 160 bytes)
function test3()
@tst_cmd begin
a ← 3
a ← a + a + 3 # parser don't allow you to use "+←" here!
end
end;