Julia 我可以使用<;-而不是朱莉娅?

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个变量

就像在R中:

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;