Julia 交互

2018-08-12 21:26 更新

交互

Julia 有一個(gè)全功能的交互式命令行 REPL (read-eval-print 循環(huán))內(nèi)置在可執(zhí)行的 julia 內(nèi)。除了允許快速并且簡(jiǎn)易的評(píng)定 Julia 語(yǔ)句,他還有一個(gè)可搜索歷史的功能,tab 補(bǔ)齊功能,以及更多有用的快捷鍵,和專門的幫助,并且還有 shell 模式。REPL 能夠通過(guò)簡(jiǎn)單的無(wú)參數(shù)調(diào)用或雙擊執(zhí)行來(lái)進(jìn)行啟動(dòng):

    $ julia
                   _
       _       _ _(_)_     |  A fresh approach to technical computing
      (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
       _ _   _| |_  __ _   |  Type "help()" to list help topics
      | | | | | | |/ _` |  |
      | | |_| | | | (_| |  |  Version 0.3.0-prerelease+2834 (2014-04-30 03:13 UTC)
     _/ |\__'_|_|_|\__'_|  |  Commit 64f437b (0 days old master)
    |__/                   |  x86_64-apple-darwin13.1.0

    julia>

如果要退出互動(dòng)會(huì)話,敲擊 ^D 即 control 鍵加上 d 鍵 - 或者是編輯 quit(),然后在敲擊回車鍵。REPL 會(huì)給你 julia> 提示。

不同的提示模式

Julia 模式

REPL 有四種主要的操作模式。第一種并且最常見(jiàn)的一種是 Julian 提示。它是默認(rèn)的操作模式;每一行的開(kāi)始都會(huì)是 julia> 。在這里,你可以輸入 Julia 表達(dá)式。在一個(gè)完整的表達(dá)式已經(jīng)輸入好之后敲打回車將會(huì)評(píng)估該條目并且顯示最后一個(gè)表達(dá)式的結(jié)果。

    julia> string(1 + 2)
    "3"

這里有許多獨(dú)特的特點(diǎn)可以來(lái)進(jìn)行交互工作。除了顯示結(jié)果外,REPL 同樣將結(jié)果綁定到變量 ans。 在該行尾部的分號(hào)可以用作一個(gè)標(biāo)志來(lái)抑制顯示結(jié)果。

    julia> string(3 * 4);

    julia> ans
    "12"

幫助模式

當(dāng)指針在一行的開(kāi)始位置時(shí),敲擊 ? 提示將會(huì)變?yōu)閹椭J?。Julia 將會(huì)嘗試打印在幫助模式中的幫助或是文檔:

    julia> ? # upon typing ?, the prompt changes (in place) to: help>

    help> string
    Base.string(xs...)

       Create a string from any values using the "print" function.

除了方法名,完成方法調(diào)用可以看到哪一個(gè)方法被指定的參數(shù)調(diào)用了。宏,類型和變量也可以查詢。

    help> string(1)
    string(x::Union(Int16,Int128,Int8,Int32,Int64)) at string.jl:1553

    help> @printf
    Base.@printf([io::IOStream], "%Fmt", args...)

       Print arg(s) using C "printf()" style format specification
       string. Optionally, an IOStream may be passed as the first argument
       to redirect output.

    help> String
    DataType   : String
      supertype: Any
      subtypes : {DirectIndexString,GenericString,RepString,RevString{T<:String},RopeString,SubString{T<:String},UTF16String,UTF8String}

想要退出幫助模式可以在一行的開(kāi)始按下退格鍵。

Shell 模式

幫助模式適用于快速訪問(wèn)文檔,另一個(gè)常見(jiàn)任務(wù)是使用系統(tǒng) Shell 來(lái)執(zhí)行系統(tǒng)命令。就像當(dāng)光標(biāo)在一行的開(kāi)始位置時(shí) ? 來(lái)進(jìn)入幫助模式,使用分號(hào) (;) 可以進(jìn)入 shell 模式。并且想要退出模式時(shí)可以在一行的開(kāi)始按下退格鍵。

    julia> ; # upon typing ;, the prompt changes (in place) to: shell>

    shell> echo hello
    hello

查找模式

在所有以上的方法中,所有執(zhí)行行會(huì)被保存到歷史文件當(dāng)中,并且能夠被查找。為了初始化一個(gè)對(duì)先前歷史的增量搜索,敲擊 ^R - control 鍵加上鍵盤上的 r 鍵。提示會(huì)被更改為 (reverse-i-search)':,并且隨著你敲擊,查詢請(qǐng)求將會(huì)出現(xiàn)在引用中。達(dá)到匹配要求的最近一次的結(jié)果將會(huì)被動(dòng)態(tài)更新在右面的控制臺(tái)中。想要找到更老的結(jié)果就使用相同查詢,然后再敲擊一次 ^R

^R 是反向查詢,而 ^S 是正向查詢,提示為 (i-search)':。這兩個(gè)可以相互結(jié)合使用來(lái)相對(duì)的移動(dòng)到前一個(gè)或是后一個(gè)匹配結(jié)果。

鍵綁定

Julia REPL 很好的使用了鍵綁定功能。上面已經(jīng)介紹了很多種控制鍵綁定(^D 用來(lái)退出, ^R^S 用來(lái)查詢),但是這里還有更多的鍵綁定。除了控制鍵,這里還有很多 meta - 鍵綁定。這些鍵綁定因平臺(tái)的不同而不同,但是大部分終端默認(rèn)使用 alt - 或 option - 選一個(gè)鍵來(lái)發(fā)送 meta - 鍵(或是通過(guò)配置)。

Program control
^D 退出(當(dāng)緩沖區(qū)為空)
^C 中斷或是取消
Return/Enter, ^J 新的一行并且如果上一行已經(jīng)完成則執(zhí)行上一行
meta-Return/Enter 新的一行并且不執(zhí)行
? or ; 進(jìn)入幫助或是 Shell 模式(在一行的起始位置)
^R, ^S 增量歷史搜索
Cursor movement
Right arrow, ^F 向右移動(dòng)一個(gè)字符
Left arrow, ^B 向左移動(dòng)一個(gè)字符
Home, ^A 移動(dòng)到該行的起始
End, ^E 移動(dòng)到該行的末尾
^P 改變先前或下一個(gè)歷史條目
^N 改變到下一個(gè)歷史條目
Up arrow 移動(dòng)到上面一行(或是先前的歷史條目)
Down arrow 移動(dòng)到下面一行(或是之后的歷史條目)
Page-up 切換到上一條光標(biāo)前的文本匹配的歷史條目
Page-down 切換到下一條光標(biāo)前的文本匹配的歷史條目
meta-F 向右移動(dòng)一個(gè)詞
meta-B 向左移動(dòng)一個(gè)詞
Editing
Backspace, ^H 刪除前一個(gè)字符
Delete, ^D 向后刪除一個(gè)字符(當(dāng)緩沖區(qū)有文本時(shí))
meta-Backspace 刪除前一個(gè)詞
meta-D 向后刪除一個(gè)詞
^W 刪除先前的直到最近的空白的所有文本
^K "殺死"到行的末尾,將文本放至緩沖區(qū)
^Y 從 kill 緩沖區(qū)插入文本
^T 根據(jù)光標(biāo)調(diào)換字符
Delete, ^D 向后刪除一個(gè)字符(當(dāng)緩沖區(qū)內(nèi)有文本)

自定義快捷鍵

Julia REPL 的快捷鍵可以通過(guò)向 REPL.setup_interface() 傳入字典類型的數(shù)據(jù)來(lái)實(shí)現(xiàn)自定義. 字典的關(guān)鍵字可以是字符, 也可以是字符串. 字符 * 代表默認(rèn)默認(rèn)操作. ^x 代表快捷鍵 Control 鍵加 x 鍵. Meta 鍵加 x 鍵可以寫(xiě)作 "\\Mx". 字典的數(shù)據(jù)必須是 nothing (代表忽略該操作), 或者參數(shù)為 (PromptState, AbstractREPL, Char 的函數(shù). 例如, 為了實(shí)現(xiàn)綁定上下鍵到搜索歷史記錄, 可以把下面的代碼加入到 .juliarc.jl :

 import Base: LineEdit, REPL

  const mykeys = {
    # Up Arrow
    "\e[A" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_prev(s, LineEdit.mode(s).hist)),
    # Down Arrow
    "\e[B" => (s,o...)->(LineEdit.edit_move_up(s) || LineEdit.history_next(s, LineEdit.mode(s).hist))
  }

  Base.active_repl.interface = REPL.setup_interface(Base.active_repl; extra_repl_keymap = mykeys)

可供使用的按鍵和操作請(qǐng)參閱 base/LineEdit.jl.

Tab 補(bǔ)全

在 Julia REPL (或者幫助模式下的 REPL), 可以輸入函數(shù)或者類型名的前幾個(gè)字符, 然后按 Tab 鍵來(lái)顯示可能的選項(xiàng)::

  julia> stri
  stride     strides     string      stringmime  strip

  julia> Stri
  StridedArray    StridedVecOrMat  String
  StridedMatrix   StridedVector

Tab 鍵也可以使 LaTeX 數(shù)學(xué)字符替換成 Unicode 并且顯示可能的選項(xiàng)::

 julia> \pi[TAB]
  julia> π
  π = 3.1415926535897...

  julia> e\_1[TAB] = [1,0]
  julia> e? = [1,0]
  2-element Array{Int64,1}:
   1
   0

  julia> e\^1[TAB] = [1 0]
  julia> e1 = [1 0]
  1x2 Array{Int64,2}:
   1  0

  julia> \sqrt[TAB]2     # √ is equivalent to the sqrt() function
  julia> √2
  1.4142135623730951

  julia> \hbar[TAB](h) = h / 2\pi[TAB]
  julia> ?(h) = h / 2π
  ? (generic function with 1 method)

  julia> \h[TAB]
  \hat              \heartsuit         \hksearow          \hookleftarrow     \hslash
  \hbar             \hermitconjmatrix  \hkswarow          \hookrightarrow    \hspace
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)