কোড ব্লকের শীর্ষে বিভিন্ন অপশন নির্দিষ্ট করে একই ভাষায় দুটি কোড ব্লক একই ভাষায় থাকা যা দুটি দোভাষীগুলিতে বিভিন্ন দোভাষীগুলিতে চালিত হয়?
কোড ব্লকের শীর্ষে বিভিন্ন অপশন নির্দিষ্ট করে একই ভাষায় দুটি কোড ব্লক একই ভাষায় থাকা যা দুটি দোভাষীগুলিতে বিভিন্ন দোভাষীগুলিতে চালিত হয়?
উত্তর:
মূল প্রশ্নটি কার্যকর করা একাধিক সংস্করণে চালিত উদ্বেগের জন্য পরিবর্তিত হয়েছে, এবং কেবল স্বাধীন দোভাষী নয়।
ব্যবহার করে 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