কোড ব্লকের শীর্ষে বিভিন্ন অপশন নির্দিষ্ট করে একই ভাষায় দুটি কোড ব্লক একই ভাষায় থাকা যা দুটি দোভাষীগুলিতে বিভিন্ন দোভাষীগুলিতে চালিত হয়?
কোড ব্লকের শীর্ষে বিভিন্ন অপশন নির্দিষ্ট করে একই ভাষায় দুটি কোড ব্লক একই ভাষায় থাকা যা দুটি দোভাষীগুলিতে বিভিন্ন দোভাষীগুলিতে চালিত হয়?
উত্তর:
মূল প্রশ্নটি কার্যকর করা একাধিক সংস্করণে চালিত উদ্বেগের জন্য পরিবর্তিত হয়েছে, এবং কেবল স্বাধীন দোভাষী নয়।
ব্যবহার করে find-library
আমি এর উত্সটি পরিদর্শন করেছি ob-ruby
, যার মধ্যে এই কোডটি রয়েছে:
(defvar org-babel-ruby-command "ruby"
"Name of command to use for executing ruby code.")
পাইথন ব্যবহারের জন্য আমি অন্য কোথাও রেফারেন্স দেখেছি org-babel-python-command
, তাই এটি অন্য কয়েকটি ভাষায় উপস্থিত রয়েছে, ob-$lang
দেখতে উপযুক্ত সমর্থনটি চেক করুন ।
এটি নিম্নলিখিতগুলিকে কাজ করতে দেয়:
#+begin_src emacs-lisp :results none
(setq org-babel-python-command "python3")
#+end_src
#+begin_src python :results output
import sys
print(sys.version)
#+end_src
#+RESULTS:
: 3.4.0 (default, Apr 11 2014, 13:05:11)
: [GCC 4.8.2]
#+begin_src emacs-lisp :results none
(setq org-babel-python-command "python2")
#+end_src
#+begin_src python :results output
import sys
print(sys.version)
#+end_src
#+RESULTS:
: 2.7.6 (default, Mar 22 2014, 22:59:56)
: [GCC 4.8.2]
এটি একত্রিত হতে পারে :session python3
এবং :session python2
প্রতিটি ব্লকের আগে এলিজপ কল এড়ানোর জন্য। দেখে মনে হচ্ছে এটি করার একটি সহজ উপায় থাকা উচিত।
org-babel-post-tangle-hook
। কারওর এ বাস্তবায়ন করা উচিত org-babel-pre-tangle-hook
।
:interpreter
সম্পত্তি দরকার।
:interpreter
বোঝা যায়। কিন্তু কোড ব্লকের org-babel-post-tangle-hook
মাধ্যমে কোড সম্পাদনের পরে চলে C-c C-c
। আমি ধরে নিই pre
কোড কার্যকর করার আগে চলবে। তবে আমি এখন উপলব্ধি করেছি যে যদি বৈশ্বিক পরিবর্তনশীল পরিবর্তন করা হয় তবে এর খারাপ পার্শ্ব প্রতিক্রিয়া হবে। :interpreter
ভালো হবে.
:interpreter
বিকল্প যুক্ত করার সিদ্ধান্ত নিয়েছি org-babel-execute:js
। তবে তারপরে উত্সটি দিয়ে org-babel-execute:js
দেখতে পেলাম যে ইতিমধ্যে একটি :cmd
বিকল্প রয়েছে যা আমি যা চাই ঠিক তা করে। দুর্ভাগ্যক্রমে, :cmd
সমস্ত ভাষার জন্য উপলভ্য নয় এবং আমি এর জন্য কোনও ডকুমেন্টেশনও পাইনি ob-js
তাই প্রাথমিকভাবে আমি আমার :cmd
অস্তিত্ব মিস করলাম ।
:cmd
, তবে দেখে মনে হচ্ছে এটি কেবল দোভাষী দোষে যুক্তি যুক্ত করতে ব্যবহৃত হয়েছিল। :cmd
ভবিষ্যতে যাদের এই সমস্যা রয়েছে তাদের সমস্যা সমাধানের জন্য ব্যবহারের সম্পূর্ণ উদাহরণ দিয়ে আপনি নিজের প্রশ্নটির উত্তর দিতে পারেন?
আমি বিশ্বাস করি ডিফল্টরূপে প্রতিটি ব্লক একই ভাষা হলেও স্বতন্ত্র ইন্টারপ্রেটারে চলে। আচরণ কিছু ভাষার জন্য আলাদা হতে পারে। উদাহরণস্বরূপ, আমি নিশ্চিত নই যে ইমাস-লিসপ ব্লকগুলি সেশন সম্পত্তিটিকে সমর্থন করে।
#+BEGIN_SRC ruby
a = "foo"
#+END_SRC
#+RESULTS:
: foo
#+BEGIN_SRC ruby
a ||= "bar"
#+END_SRC
#+RESULTS:
: bar
#+BEGIN_SRC ruby :session foo
a ||= "session foo"
#+END_SRC
#+RESULTS:
: session foo
#+BEGIN_SRC ruby :session foo
a += " with bar"
#+END_SRC
#+RESULTS:
: session foo with bar
প্রথম দুটি ব্লক স্বতন্ত্র দোভাষী ব্যবহার করে তবে তৃতীয় এবং চতুর্থ ব্লক একটি সেশন ভাগ করে :foo
, যাতে তারা একই দোভাষীকে মূল্যায়ন করে।
দেখা যাচ্ছে যে আরও প্রায় সব ভাষা অর্গ বাবেল দ্বারা সমর্থিত কোনও নির্দিষ্ট কোড-ব্লকের জন্য আলাদা দোভাষী ব্যবহার করার বিকল্প নেই। একটি উল্লেখযোগ্য ব্যতিক্রম (এবং যেটি আমার আগ্রহী) হ'ল জাভাস্ক্রিপ্ট। এই ক্ষেত্রে একটি :cmd
বিকল্প ব্যবহার করতে পারেন ।
node
ভেরিয়েবলের সংজ্ঞা অনুসারে স্ট্যান্ডার্ড জেএস ইন্টারপ্রেটার org-babel-js-cmd
। একটি পৃথক দোভাষী দ্বারা একটি নির্দিষ্ট কোড ব্লক চালানোর :cmd
জন্য নিম্নলিখিত উদাহরণ হিসাবে বিকল্পটি পাস করুন ।
#+begin_src js :cmd "/usr/bin/osascript -l JavaScript"
app = Application.currentApplication()
app.includeStandardAdditions = true
app.say("Hello")
#+end_src