Kullanıcı tanımlı infix operatörü


10

Julia'daki operatörlerin sadece standart işlevler olduğunu biliyorum ve bunları normal önek çağrı sözdizimini kullanarak kullanabilirim:

julia> +(1, 2)
3

Bununla birlikte, aynı zamanda infix operatörleri olarak kullanılabildikleri (ve genellikle kullanıldıkları) açısından özeldirler:

julia> 1+2
3


Kendi infix operatörünüzü tanımlayabilir miyim? Öyleyse nasıl?

Örneğin:

julia> α(x, y) = x+y
α (generic function with 1 method)

julia> α(1, 2)
3 # as expected

julia> 1α2
# expected result: 3
ERROR: UndefVarError: α2 not defined
Stacktrace:
 [1] top-level scope at REPL[5]:1

julia> 1 α 2
# expected result: 3
ERROR: syntax: extra token "α" after end of expression
Stacktrace:
 [1] top-level scope at REPL[5]:0

Yanıtlar:


14

Söylediğiniz gibi, operatörler sadece diğer işlevler gibi tanımlayabileceğiniz ve başka şekillerde değiştirebileceğiniz standart işlevlerdir. Ancak, Julia'nın ayrıştırıcısı belirli bir simge kümesini infix operatörleri olarak tanıyacak şekilde yapılandırılmıştır; adı bu sembollerden biri olan bir işlev tanımlarsanız, bir infix operatörü olarak ayrıştırılır.

Örneğin:

julia> ⊕(x, y) = x+y
⊕ (generic function with 1 method)

# standard prefix function call
julia> ⊕(1, 2)
3

# infix operator call
julia> 1⊕2
3

julia> 1 ⊕ 2
3


Infix operatörleri (ve ilişkili öncelikleri) olarak tanınan sembollerin listesi Julia ayrıştırıcısı kaynak kodunda bulunabilir . Çoğunlukla, bu liste unicode Sm kategorisinin bir alt kümesidir (Sembol, matematik).

Şu anda, örneğin şunları içerir:

  • ile aynı öncelikte ayrıştırıldı +:
+ - ⊕ ⊖ ⊞ ⊟ ∪ ∨ ⊔ ± ∓ ∔ ∸ ≏ ⊎ ⊻ ⊽ ⋎ ⋓ ⧺ ⧻ ⨈ ⨢ ⨣ ⨤ ⨥ ⨦
⨧ ⨨ ⨩ ⨪ ⨫ ⨬ ⨭ ⨮ ⨹ ⨺ ⩁ ⩂ ⩅ ⩊ ⩌ ⩏ ⩐ ⩒ ⩔ ⩖ ⩗ ⩛ ⩝ ⩡ ⩢ ⩣
  • ile aynı öncelikte ayrıştırıldı *:
* / ÷ % & ⋅ ∘ × ∩ ∧ ⊗ ⊘ ⊙ ⊚ ⊛ ⊠ ⊡ ⊓ ∗ ∙ ∤ ⅋ ≀ ⊼ ⋄ ⋆ ⋇
⋉ ⋊ ⋋ ⋌ ⋏ ⋒ ⟑ ⦸ ⦼ ⦾ ⦿ ⧶ ⧷ ⨇ ⨰ ⨱ ⨲ ⨳ ⨴ ⨵ ⨶ ⨷ ⨸ ⨻
⨼ ⨽ ⩀ ⩃ ⩄ ⩋ ⩍ ⩎ ⩑ ⩓ ⩕ ⩘ ⩚ ⩜ ⩞ ⩟ ⩠ ⫛ ⊍ ▷ ⨝ ⟕ ⟖ ⟗

7
Ayrıca, neredeyse tüm diğer sembolleri makroların gücüne sahip bir infix operatörü olarak kullanabilirsiniz ! (eğer gerçekten istiyorsanız). Bir vardı @infix hack (o dizilimi ile örtülü çarpma dayanır) bu yaptığını: julia> using InfixFunctions; @infix α(x, y) = x + y; 1 |α| 2. ( InfixFunctions.jlkendim için bir makro egzersizi olarak geliştirildi, julia 1.x ile olduğu gibi çalışmaz.)
— SalchiPapa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.